【发布时间】:2020-03-12 11:54:06
【问题描述】:
我有 2 个字典列表
l1 = [{'company': 'XYZ', 'url': '/xyz', 'industry': 'Utilities', 'sector': 'Conventional electricity'}, {...}]
l2 = [{'url': '/xyz', 'industry': ['Electric utility'], 'website': ['xyz.com']}, {...}]
每个字典都有一个公共键“url”。
我的要求是所有列表中的 dict 中具有相同值的 'url' 键应合并,如果合并时 dicts 中不存在特定键,则为这些键分配 None/null。
期望的输出应该是:
[
{'company': 'XYZ', 'url': '/xyz', 'industry': ['Electric utility', 'Utilities'], 'sector': 'Conventional electricity', 'website': ['xyz.com']},
{...}
]
到目前为止我尝试过的是:
from itertools import groupby
from collections import ChainMap
from operator import itemgetter
from pprint import pprint
def merge_lists_of_dicts(list1, list2, by_key):
dict_list = list1 + list2
by_key = itemgetter(by_key)
res = map(lambda dict_tuple: dict(ChainMap(*dict_tuple[1])),
groupby(sorted(dict_list, key=by_key), key=by_key))
return list(res)
pprint(merge_lists_of_dicts(l1, l2, "url"))
我得到的输出是:
[{'company': 'XYZ',
'industry': 'Utilities',
'sector': 'Internet',
'url': '/xyz',
'website': ['xyz.com']}, {...}]
感谢任何帮助。最好的pythonic方式会很棒。 提前致谢
【问题讨论】:
标签: python