尝试在python中反向字典时,TypeError:“ int”对象不可迭代

问题描述

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",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,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方法在形式为(键,值)的2元素元组上返回迭代器,并且在for循环的每次迭代中,变量{{1 }}仅包含这些2元素元组之一。然后可以在拆包分配中将其拆包为多个变量(在本例中为2个变量),这需要遍历元组的元素。

也可以省略item变量,并简单地编写:

item

这更接近您在字典理解中使用的语言。

现在查找出错的版本-或等效的for k,v in multipleDict.items(): .... 循环。我将再次使用for变量来编写它,尽管再次,它不需要它。

item

当您遍历字典时,您遍历了键,因此这也等效于:

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

在这种情况下,字典的键只是整数-这里的1、5、7和9999(不一定按此顺序)。因此,在第一次迭代中,for item in mutipleDict.keys(): k,v = item ... 将包含这些整数之一,并且它将尝试将其分解为多个变量。但是您不能遍历整数,这就是为什么会看到错误的原因。

回到原始的字典理解,更正后的版本是:

item