通过字典在for循环中解压缩多个变量

时间:2015-02-17 02:28:37

标签: python python-2.7 dictionary argument-unpacking

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

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

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

4 个答案:

答案 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.OrderedDictsorted()和关键功能。

答案 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