Python中按公共键合并多字典并为各源字典生成新键的优雅实现方法
嘿,这个按公共键合并字典并生成对应新键的需求,我有个优雅的Python实现方案,一起来看看~
实现思路
核心思路是先收集所有字典中出现过的键(保证不会漏掉只在单个字典里存在的键),然后针对每个键,遍历所有源字典提取对应的值——如果某个键在源字典中不存在,就用空列表(或者你想要的其他空值)来填充,最后把每个键的相关数据整理成字典,组成目标列表。
完整代码示例
# 定义输入字典 d1 = {"key1": ["a", "b"], "key2": ["c", "d"]} d2 = {"key1": ["e", "f"]} def merge_dicts_by_common_key(dict_list, dict_names): # 收集所有字典中出现的键 all_keys = set() for d in dict_list: all_keys.update(d.keys()) result_list = [] for key in all_keys: # 为当前键创建对应的条目字典 item = {"old_key": key} # 遍历每个源字典,添加对应键值对 for name, d in zip(dict_names, dict_list): item[f"{name}_key"] = d.get(key, []) # 用空列表作为缺失值的默认值 result_list.append(item) return result_list # 调用函数生成目标列表 dd = merge_dicts_by_common_key([d1, d2], ["d1", "d2"]) print(dd)
运行这段代码后,输出结果就是你想要的结构:
[{'old_key': 'key1', 'd1_key': ['a', 'b'], 'd2_key': ['e', 'f']}, {'old_key': 'key2', 'd1_key': ['c', 'd'], 'd2_key': []}]
代码细节说明
- 通用性强:这个函数支持合并任意数量的字典,只要把字典放进
dict_list,对应的名称放进dict_names就行(比如要加d3,就把[d1,d2]改成[d1,d2,d3],["d1","d2"]改成["d1","d2","d3"]); - 缺失值处理:用
dict.get(key, 默认值)的方式优雅处理键不存在的情况,这里用的是空列表,如果你想换成None,只需要把[]改成None即可; - 集合去重:用
set收集所有键,自动帮我们去重,避免重复处理同一个键。
内容的提问来源于stack exchange,提问作者Lopsdie
相关产品推荐
相关产品推荐

