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