簡體   English   中英

在字典列表中,根據鍵合並列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM