Python列表到字典 - 没有值覆盖

时间:2015-03-02 21:15:00

标签: python dictionary key append

Keys = [1,2,3]
Values = [["a",1],["b",2],["c",3],["d",1]]

Dictionary = dict.fromkeys(Keys)  

for d in Dictionary:
    for value in Values:
        if value[1] == d:
            # Add to dictionary
            Dictionary.update({d:value})
        # else
            # Do Nothing

print(Dictionary)

当我运行这段代码时,它工作正常,直到我仔细观察它的输出。我注意到因为我想在'Key'1中添加两个'值',它会覆盖第一个添加的值并留下最后一个,这里是输出:

{1: ['d', 1], 2: ['b', 2], 3: ['c', 3]}

我希望键1的值同时为['a',1]['d',1]

3 个答案:

答案 0 :(得分:4)

使用defaultdict对象。

# -*- coding: utf-8 -*-
from collections import defaultdict

values = [["a", 1], ["b", 2], ["c", 3], ["d", 1]]
d = defaultdict(list)
for x, y in values:
    d[y].append([x, y])

然后您可以像常规dict对象一样访问键和值。

for k, v in d.iteritems():
    print "{} {}".format(k,v)

哪个输出

1 [['a', 1], ['d', 1]]
2 [['b', 2]]
3 [['c', 3]]

答案 1 :(得分:1)

为单个键设置多个值的唯一方法是将它们包装在另一个容器中,通常是一个列表。你可以这样做:

from collections import defaultdict

keys = [1,2,3]
values = [["a",1],["b",2],["c",3],["d",1]]

mydict = defaultdict(list)
for key in keys:
   mydict[key].extend(value for value in values if value[1] == key)

答案 2 :(得分:1)

像这样的东西,你的意思是:

my_dict = {i:[] for i in Keys}

for a, b in Values:
    my_dict[b].append([a, b])