这可能是Python中的经典问题,但我还没有找到答案。
我有一个词典列表,这些词典有类似的键。 它看起来像这样:
[{0: myech.MatchingResponse at 0x10d6f7fd0,
3: myech.MatchingResponse at 0x10d9886d0,
6: myech.MatchingResponse at 0x10d6f7d90,
9: myech.MatchingResponse at 0x10d988ad0},
{0: myech.MatchingResponse at 0x10d6f7b10,
3: myech.MatchingResponse at 0x10d6f7f90>}]
我想获得一个以[0,3,6,9]为键的新词典,并将“myech.MatchingResponse”列表作为值。
当然我可以使用一个简单的循环来做到这一点,但我想知道是否有更有效的解决方案。
答案 0 :(得分:18)
import collections
result = collections.defaultdict(list)
for d in dictionaries:
for k, v in d.items():
result[k].append(v)
答案 1 :(得分:2)
假设您的列表已分配给名为mylist的变量。
mydic = {}
for dic in mylist:
for key, value in dic.items():
if key in mydic:
mydic[key].append(value)
else:
mydic[key] = [value]
答案 2 :(得分:1)
也可以用dict理解来做到这一点......可能是一行,但为了清晰起见,我把它保留为两行。 :)
from itertools import chain
all_keys = set(chain(*[x.keys() for x in dd]))
print {k : [d[k] for d in dd if k in d] for k in all_keys}
结果:
{0: ['a', 'x'], 9: ['d'], 3: ['b', 'y'], 6: ['c']}
答案 3 :(得分:0)
如果您有一个字典列表,每个字典中具有相同的键,则可以将它们转换为列表字典,如以下示例所示(其中一些字典会比其他一些答案考虑使用pythonic)。
d = []
d.append({'a':1,'b':2})
d.append({'a':4,'b':3})
print(d)
[{'a': 1, 'b': 2}, {'a': 4, 'b': 3}]
newdict = {}
for k,v in d[0].items():
newdict[k] = [x[k] for x in d]
print(newdict)
{'a': [1, 4], 'b': [2, 3]}