Skip to main content
 首页 » 编程设计

python之合并两个字典列表

2025年05月04日19三少

假设我有两个字典列表。这些键的名称和编号(键的)相同。但是,这些值要么相同,要么不同。输出:合并值的字典列表。

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']}]