Python字典列表合并

时间:2012-07-18 16:04:26

标签: python list set structure dictionary

我想在列表中加入词典,其关键“用户”是相同的,但我没有意识到如何。例如:

[{'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}]

我进行了广泛的搜索而没有在堆栈溢出中找到类似的东西,任何帮助都将非常感激。

4 个答案:

答案 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 }

编辑:为团体工作:

http://codepad.org/ObWT2Hl3

答案 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}]