有人可以告诉我为什么我在下面的代码中遇到解包错误吗?
bucket = {
'a': 'Joe',
'b': 'Brooke',
'c': 'Scott',
'd': 'Sam',
}
for i, kv in enumerate(bucket):
k, v = kv
print i, k, v
有人可以告诉我为什么我在下面的代码中遇到解包错误吗?
bucket = {
'a': 'Joe',
'b': 'Brooke',
'c': 'Scott',
'd': 'Sam',
}
for i, kv in enumerate(bucket):
k, v = kv
print i, k, v
因为kv
不是可以解包的东西:它是您字典的关键之一。也许你的意思是:
for i, k in enumerate(bucket):
print i, k, bucket[k]
遍历 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()
与键功能一起使用。
这不是正确的方法,您认为您可以分解为 key-value but kv
equals to your dict keys 之类的部分。不像那样。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
>>>
for k, v in bucket.iteritems():
print k, v
a Joe
c Scott
b Brooke
d Sam