Adj*_*con 9 python dictionary python-2.7
注意:我已阅读此帖和Alex Martelli的回复,但我并不完全/完全理解他的回答.这有点超出了我目前的理解.我想帮助更好地理解它.
我理解当您尝试以下for循环时:
for key, value in dict:
print key
print value
Run Code Online (Sandbox Code Playgroud)
你得到:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
虽然您可以循环遍历字典,但只需使用以下内容获取密钥:
for key in dict:
print key
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一个稍微不那么高级的解释,为什么你不能使用键值,而不使用.iteritems()?来迭代字典?
Ste*_*ann 11
另一个答案解释得很好.但是这里有一些关于它如何表现的进一步说明,通过显示它实际上没有错误的情况(所以你可以看到一些东西):
>>> d = {(1,2): 3, (4,5): 6}
>>> for k, v in d:
print k, v
1 2
4 5
Run Code Online (Sandbox Code Playgroud)
循环遍历键(1,2),(4,5)并且因为那些"碰巧是"大小为2的元组,它们可以被分配给k和v.
也可以使用字符串,只要它们只有两个字符:
>>> d = {"AB":3, "CD":6}
>>> for k, v in d:
print k, v
A B
C D
Run Code Online (Sandbox Code Playgroud)
我假设你的情况是这样的?
>>> d = {"ABC":3, "CD":6}
>>> for k, v in d:
print k, v
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
for k, v in d:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
这里,键"ABC"是三元组,因此Python抱怨尝试将其解压缩为两个变量.
Python有一个名为iterable unpacking的功能.当你这样做
a, b = thing
Run Code Online (Sandbox Code Playgroud)
Python假设thing是一个元组或列表或具有2个项目的东西,它将第一个和第二个项目分配给a和b.这也适用于for循环:
for a, b in thing:
Run Code Online (Sandbox Code Playgroud)
相当于
for c in thing:
a, b = c
Run Code Online (Sandbox Code Playgroud)
除了它不创建该c变量.
这意味着,如果你这样做
for k, v in d:
Run Code Online (Sandbox Code Playgroud)
Python无法看到你说过的事实,k, v而不是k给你项而不是键,因为键可能是2元组.它必须遍历键并尝试将每个键解包到k和v变量中.