Com*_*non 3 python dictionary list
我有一个list
由dict
相同结构组成的,
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)
您可以使用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
。