TypeError:尝试在python中反转字典时,“int”对象不可编辑

2024-09-29 22:28:07 发布

您现在位置: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?然而,当我尝试运行它时,我收到了这个错误

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

Tags: inpytestforlinemultipleusersfile
3条回答

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

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

这里,字典的items方法返回形式(键、值)的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()}

您需要在dict的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])

相关问题 更多 >

    热门问题