在不使用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]}
答案 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]}
>>>