按某个键合并字典列表

Com*_*non 3 python dictionary list

我有一个listdict相同结构组成的,

sample = [{'a':1, 'b':2, 'c':3}, {'a':1, 'b':2, 'c':4}, {'a':2, 'b':2, 'c':5}, {'a':2, 'b':3, 'c':5}]
Run Code Online (Sandbox Code Playgroud)

我想通过键组合它们a,输出应该是

[{'a': 1, 'd': [{'b':2, 'c':3}, {'b':2, 'c':4}]}, {'a': 2, 'd': [{'b':2, 'c':5}, {'b': 3, 'c':5}]}]
Run Code Online (Sandbox Code Playgroud)

Cyt*_*rak 9

您可以使用itertools.groupby

>>> from itertools import groupby
>>> result = []
>>> for key, group in groupby(sorted(sample, key=lambda x:x['a']), key=lambda x:x.pop('a')):
        result.append({'a':key, 'd':[*group]})
>>> result
[{'a': 1, 'd': [{'b': 2, 'c': 3}, {'b': 2, 'c': 4}]},
 {'a': 2, 'd': [{'b': 2, 'c': 5}, {'b': 3, 'c': 5}]}]
Run Code Online (Sandbox Code Playgroud)

注意:sorted如果保证字典列表按 key 的值排序,则不需要a