[英]inside list of dictionaries, merge lists based on key
我在字典列表中嵌套了字典,我想根據'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'}]
所需的 output:
[{'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”合並列表。
這樣的事情應該可以解決問題
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()]
以下使用itertools.groupby
生成所需的 output:
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)
]
我不確定當有重復時預期的行為應該是什么——例如,列表應該是:
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'}]
如果您在問題中提供更多信息,我可以相應地更新答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.