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
循环,将有助于更好地理解错误:这里,字典的
items
方法返回形式(键、值)的2元素元组的迭代器,并且在for
循环的每次迭代中,变量item
只包含这些2元素元组中的一个。然后可以在解包赋值中将其解包为多个变量(在本例中为2个变量),解包赋值需要迭代元组的元素还可以省略
item
变量,只需编写:这更接近于你在字典理解中使用的
现在来看看出错的版本或与之相当的
for
循环。我将继续使用item
变量编写它,尽管它同样不需要它当您迭代字典时,您迭代键,因此这也相当于:
在本例中,字典的键在这里仅为整数1、5、7和9999(不一定按该顺序排列)。因此,在第一次迭代中,
item
将包含这些整数中的一个,它正试图将其解压为多个变量。但是你不能迭代一个整数,这就是为什么你会看到错误回到最初的词典理解,更正的版本只是:
您需要在dict的
items()
上迭代:需要在最后一步中使用字典的items()函数对其进行迭代:
或者,如果在步骤3中切换值,甚至不需要这样做,请尝试以下操作:
相关问题 更多 >
编程相关推荐