我在字典列表中嵌套了字典,我想基于'id'
合并列表
res = [{'i': ['1'], 'id': '123'},
{'i': ['1'], 'id': '123'},
{'i': ['1','2','3','4','5','6'],'id': '123'},
{'i': ['1'], 'id': '234'},
{'i': ['1','2','3','4','5'],'id': '234'}]
所需的输出:
[{'i': [1, 1, 1, 2, 3, 4, 5, 6], 'id': '123'},
{'i': [1, 1, 2, 3, 4, 5], 'id': '234'}]
我正在尝试基于键"id"
合并嵌套字典。我不知道最好的出路:
import collections
d = collections.defaultdict(list)
for i in res:
for k, v in i.items():
d[k].extend(v)
上面的代码正在合并所有列表,但是我想基于键“ id”合并列表。
答案 0 :(得分:2)
类似的事情应该可以解决问题
from collections import defaultdict
merged = defaultdict(list)
for r in res:
merged[r['id']].extend(r['i'])
output = [{'id': key, 'i': merged_list} for key, merged_list in merged.items()]
答案 1 :(得分:1)
以下使用itertools.groupby
产生所需的输出:
from operator import itemgetter
from itertools import groupby
k = itemgetter('id')
[
{'id': k, 'i': [x for d in g for x in d['i']]}
for k, g in groupby(sorted(res, key=k), key=k)
]
答案 2 :(得分:0)
我不确定重复的情况下的预期行为-例如,列表应为:
set()
一样对待吗?[1,1,2,3...]
?这是我们使用dict comprehension
的一种变体:
{item['id']: item for item in res}.values()
# [{'i': ['1', '2', '3', '4', '5'], 'id': '234'}, {'i': ['1', '2', '3', '4', '5', '6'], 'id': '123'}]
如果您在问题中提供了更多信息,我可以相应地更新答案。