假设我有两个字典列表。这些键的名称和编号(键的)相同。但是,这些值要么相同,要么不同。输出:合并值的字典列表。
list_a = [{'token_a': ['ab', 'cd', 'ef', 'hello', 'there']}, {'token_b': ['abc', 'rcd', 'gef', 'more', 'values']}]
list_b = [{'token_a': ['ab', 'cd', 'dfcdef']}, {'token_b': ['abc', 'rcd', 'jdhfgef']}]
预期输出:
output_list = [{'token_a': ['ab', 'cd', 'ef', 'dfcdef', 'hello', 'there']}, {'token_b': ['abc', 'rcd', 'gef', 'jdhfgef', 'more', 'values']}]
这是我尝试过的: - 定义一个合并一对字典的 fn - 然后,在 for 循环中为每一对(来自两个列表)运行此 fn。
def merge_pair_of_dicts(d1, d2):
final_values = []
merged_dict = {}
for k, v1 in d1.items():
for _, v2 in d2.items():
values = [v1 + v2]
values = [item for sublist in values for item in sublist]
final_values = list(set(values))
merged_dict = {k: final_values}
return merged_dict
zipped_lists = list(zip(list_a, list_b))
print(zipped_lists)
final_list_of_dicts = []
for dict_pair in zipped_lists:
d1 = dict_pair[0]
d2 = dict_pair[1]
merged_dict = merge_pair_of_dicts(d1, d2)
final_list_of_dicts.append(merged_dict)
print(final_list_of_dicts)
我上面的程序是可读的并且可以完成工作。但是,有没有更好的方法可以合并两个字典列表?
请您参考如下方法:
在单个列表理解和设置对象中:
list_a = [{'token_a': ['ab', 'cd', 'ef', 'hello', 'there']}, {'token_b': ['abc', 'rcd', 'gef', 'more', 'values']}]
list_b = [{'token_a': ['ab', 'cd', 'dfcdef']}, {'token_b': ['abc', 'rcd', 'jdhfgef']}]
res= [{k: list(set(v + list_b[i][k]))}
for i, d in enumerate(list_a) for k, v in d.items()]
print(res)
输出:
[{'token_a': ['ab', 'there', 'dfcdef', 'cd', 'ef', 'hello']}, {'token_b': ['more', 'jdhfgef', 'abc', 'values', 'gef', 'rcd']}]
