【问题标题】:TypeError: 'int' object is not iterable when trying to reverse a dictionary in pythonTypeError:尝试在python中反转字典时'int'对象不可迭代
【发布时间】:2020-12-27 00:55:41
【问题描述】:
listyList = [1, 5, 7, 9999]
multiple = [(f, f*100) for f in listyList]
multipleDict = {f[0]:f[1] for f in multiple}

multipleDict = {v:k for k, v in multipleDict}

print (multipleDict[700])

我是一个初学者,并试图反转一个类似于教程中示例的字典。据我所知,我应该遍历字典而不是 int?但是当我尝试运行它时收到此错误

Traceback (most recent call last):
  File "C:\Users\User\Desktop\test.py", line 5, in <module>
    multipleDict = {v:k for k, v in multipleDict}
  File "C:\Users\User\Desktop\test.py", line 5, in <dictcomp>
    multipleDict = {v:k for k, v in multipleDict}
TypeError: 'int' object is not iterable

【问题讨论】:

  • 你的意思是for k, v in multipleDict.items()不是for k, v in multipleDict
  • multipleDict = dict(multiple).

标签: python loops dictionary dictionary-comprehension


【解决方案1】:

你需要遍历它们items() 的dict:

listyList = [1, 5, 7, 9999]
multiple = [(f, f*100) for f in listyList]
multipleDict = {f[0]:f[1] for f in multiple}

multipleDict = {v:k for k, v in multipleDict.items()}

【讨论】:

    【解决方案2】:

    需要在最后一步使用字典的 items() 函数对它们进行迭代:

    multipleDict = {v:k for k, v in multipleDict.items()}
    

    或者,如果您在步骤 3 中切换值,则甚至不需要,请尝试以下操作:

    listyList = [1, 5, 7, 9999]
    multiple = [(f, f*100) for f in listyList]
    multipleDict = {f[1]:f[0] for f in multiple}
    print(multipleDict[700])
    

    【讨论】:

      【解决方案3】:

      我认为,如果我们看一下大致等效的 for 循环,首先使用正确的表达式,这将有助于更多地理解错误:

      for item in multipleDict.items():
          k, v = item
          ...
      

      这里,字典的items 方法返回一个迭代器,该迭代器对形式为 (key, value) 的 2 元素元组进行迭代,并且在 for 循环的每次迭代中,变量 item 仅包含以下之一这些 2 元素元组。然后可以在解包赋值中将其解包为多个变量(在本例中为 2 个变量)——这需要遍历元组的元素。

      也可以省略item 变量,简单写成:

      for k, v in multipleDict.items():
          ....
      

      这更接近您在字典理解中使用的内容。

      现在是出错的版本 - 或与之等效的 for 循环。我将使用item 变量重新编写它,虽然它不需要它。

      for item in mutipleDict:
          k, v = item
          ...
      

      当您遍历字典时,您会遍历键,因此这也相当于:

      for item in mutipleDict.keys():
          k, v = item
          ...
      

      在这种情况下,您的字典的键只是整数 - 这里是 1、5、7 和 9999(不一定按此顺序)。因此,在第一次迭代中,item 将包含其中一个整数,并且它试图将其解压缩为多个变量。但是你不能迭代一个整数,这就是你得到你看到的错误的原因。

      回到原来的字典理解,修正后的版本只是:

      multipleDict = {v:k for k, v in multipleDict.items()}
      

      【讨论】:

        猜你喜欢
        • 2018-02-10
        • 2015-04-06
        • 2013-10-31
        • 2018-09-22
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 2011-08-09
        相关资源
        最近更新 更多