TypeError: 'int' object is not iterable when trying to reverse a dictionary in python

TypeError: 'int' object is not iterable when trying to reverse a dictionary in python

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?但是当我尝试 运行 it

时收到此错误
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

你需要迭代它们 items() 的字典:

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()}

需要在最后一步使用字典的 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])

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

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

这里,字典的 items 方法 returns 一个迭代器,遍历形式为 (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()}