我想在列表中加入词典,其关键“用户”是相同的,但我没有意识到如何。例如:
[{'count2': 34, 'user': 2},
{'count4': 233, 'user': 2},
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
会变成:
[{'count2': 34, 'count4': 233, 'user': 2 },
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
我进行了广泛的搜索而没有在堆栈溢出中找到类似的东西,任何帮助都将非常感激。
答案 0 :(得分:7)
from collections import defaultdict
dl = [{'count2': 34, 'user': 2},
{'count4': 233, 'user': 2},
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
print dl
dd = defaultdict(dict)
for d in dl:
dd[d['user']].update(d)
print dd.values()
答案 1 :(得分:3)
您可以排序然后使用groupby,然后将其合并
from itertools import groupby
def merge(dicts):
ret = {}
for d in dicts:
ret.update(d)
return ret
d = [...]
sorted_d = sorted(d, key=lambda x: x['user'])
grouped_d = itertools.groupby(sorted_d, key=lambda x: x['user'])
print [merge(y[1]) for y in grouped]
答案 2 :(得分:1)
在数组中:
[{'count2': 34, 'user': 2},
{'count4': 233, 'user': 2},
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
a = {'count2': 34, 'user': 2}
和b = {'count4': 233, 'user': 2}
,
dict(a.items() + b.items())
将返回:
{'count2': 34, 'count4': 233, 'user': 2 }
编辑:为团体工作:
答案 3 :(得分:1)
这样的事情应该有效。但是可能有更有效的方法(并且在更少的行中)......
# Input
a=[{'count2': 34, 'user': 2},
{'count4': 233, 'user': 2},
{'count2': 234, 'user': 4},
{'count4': 344, 'user': 5}]
# Get set of unique users
u=list(set([x['user'] for x in a]))
# Create a blank list of dictionaries for the result
r=[{}] * len(u)
# Iterate over input and add the dictionaries together
for x in a:
r[u.index(x['user'])] = dict(r[u.index(x['user'])].items() + x.items())
>>> r
[{'count2': 34, 'user': 2, 'count4': 233}, {'count2': 234, 'user': 4}, {'count4': 344, 'user': 5}]