1

有人可以告诉我为什么我在下面的代码中遇到解包错误吗?

bucket = {
        'a': 'Joe',
        'b': 'Brooke',
        'c': 'Scott',
        'd': 'Sam',
}

for i, kv in enumerate(bucket):
    k, v = kv
    print i, k, v
4

4 回答 4

3

因为kv不是可以解包的东西:它是您字典的关键之一。也许你的意思是:

for i, k in enumerate(bucket):
    print i, k, bucket[k]
于 2015-02-17T02:34:58.470 回答
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.OrderedDictsorted()与键功能一起使用。

于 2015-02-17T02:51:25.140 回答
2

这不是正确的方法,您认为您可以分解为 key-value but kvequals 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
>>> 
于 2015-02-17T03:02:25.303 回答
0
for k, v in bucket.iteritems():
    print k, v

a Joe  
c Scott  
b Brooke  
d Sam
于 2015-02-17T03:10:51.137 回答