将多个不同值的列表添加到字典中的相同键

时间:2014-09-21 22:03:17

标签: python list dictionary

在不使用defaultdict的情况下,最简单的方法是什么?如果使用核心python功能来执行此操作太麻烦,那么defaultdict就可以了。

我有一个列表列表。

我有一个短循环来创建一些带有值的列表,我希望将其映射到dict中的键。

所以,最后我会得到每个键的多个值。然后打印。

这就是我到目前为止......

Keys = ['A','B','C'] #the keys that will be mapped to all values start here in a list               
Values = [] #starting with empty values
Dict = dict(zip(Keys, Values)) #starting with a dict of keys mapped to empty values

x=0
while x < 5:
    x += 1 
    MoreValues = [1+x,2+x,3] #adding x only to give some different values
    Dict = dict(zip(Keys, MoreValues))

    print Dict

使用此代码输出:

{'A': 2, 'C': 3, 'B': 3}
{'A': 3, 'C': 3, 'B': 4}
{'A': 4, 'C': 3, 'B': 5}
{'A': 5, 'C': 3, 'B': 6}
{'A': 6, 'C': 3, 'B': 7}   

另一种查看问题的方法是,如何将这些结果字典合并在一起,以便将A,B,C的键映射到这些多个值,给定此设置并使用for循环生成值列表。

输出应为:

{'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]}

3 个答案:

答案 0 :(得分:1)

您也可以使用defaultdict

from collections import defaultdict
d = defaultdict(lambda: [])

for x in range(5):
    for key in keys:
        d[key].append(x)

答案 1 :(得分:0)

keys = "ABC"
answer = {}

x = 1
while x<5:
    for key in keys:
        if key not in answer:
            answer[key] = []
        answer[key].append(x)
    x += 1

当然,您可以将初始化移出while循环:

keys = "ABC"
answer = {}
for key in keys:
    if key not in answer:
        answer[key] = []

x = 1
while x<5:
    for key in keys:
        answer[key].append(x)
    x += 1

答案 2 :(得分:0)

你可以尝试这段代码:所以如果你不能依赖某些部分,我会写下所有细节请问:

>>> d1={'A': 2, 'C': 3, 'B': 3l}
>>> d2={'A': 3, 'C': 3, 'B': 4}
>>> d3={'A': 4, 'C': 3, 'B': 5}
>>> d4={'A': 5, 'C': 3, 'B': 6}
>>> d5={'A': 6, 'C': 3, 'B': 7}
>>> keys=[d1.keys(),d2.keys(),d3.keys(),d4.keys(),d5.keys()]
>>> values=[d1.values(),d2.values(),d3.values(),d4.values(),d5.values()]
>>> keys
[['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B'], ['A', 'C', 'B']]
>>> values
[[2, 3, 3], [3, 3, 4], [4, 3, 5], [5, 3, 6], [6, 3, 7]]
>>> set_keys=[set(list(i)).pop() for i in zip(*keys)]
>>> set_keys
['A', 'C', 'B']
>>> set_values=zip(*values)
>>> set_values
[(2, 3, 4, 5, 6), (3, 3, 3, 3, 3), (3, 4, 5, 6, 7)]
>>> set_values=map(list,zip(*values))
>>> set_values
[[2, 3, 4, 5, 6], [3, 3, 3, 3, 3], [3, 4, 5, 6, 7]]
>>> dict(zip(set_keys,set_values))
{'A': [2, 3, 4, 5, 6], 'C': [3, 3, 3, 3, 3], 'B': [3, 4, 5, 6, 7]}
>>>