有人可以告诉我为什么我在下面的代码中收到解包错误吗?
bucket = {
'a': 'Joe',
'b': 'Brooke',
'c': 'Scott',
'd': 'Sam',
}
for i, kv in enumerate(bucket):
k, v = kv
print i, k, v
答案 0 :(得分:3)
因为kv
不是可以解包的东西:它是你字典的关键之一。也许你的意思是:
for i, k in enumerate(bucket):
print i, k, bucket[k]
答案 1 :(得分:2)
迭代dict只返回键,如果你想要键值对,你必须使用dict.items()
:
for i, kv in enumerate(bucket.items()):
k, v = kv
print i, k, v
甚至更好,直接在循环中解压缩:
for i, (k, v) in enumerate(bucket.items()):
print i, k, v
另请注意,不会按键订购商品。如果您需要订购,请使用collections.OrderedDict
或sorted()
和关键功能。
答案 2 :(得分:2)
这不是一个正确的方法,你认为你可以分成像键值but kv
等于你的dict键的碎片。它不是那样的。 kv
是一个带dict键的变量。
bucket = {
'a': 'Joe',
'b': 'Brooke',
'c': 'Scott',
'd': 'Sam',
}
for i, kv in enumerate(bucket):
print (i,kv)
>>>
0 a
1 c
2 b
3 d
>>>
你看,这里只有钥匙。解决方案是;
bucket = {
'a': 'Joe',
'b': 'Brooke',
'c': 'Scott',
'd': 'Sam',
}
for i, kv in enumerate(bucket):
print (i,kv,bucket[kv])
>>>
0 c Scott
1 a Joe
2 d Sam
3 b Brooke
>>>
答案 3 :(得分:0)
for k, v in bucket.iteritems():
print k, v
a Joe
c Scott
b Brooke
d Sam