基于公共key合并字典列表:多键合并实现求助
合并字典列表中同key1的元素
输入输出示例
输入字典列表:
[{'key1': 'fixed_value', 'validlink': ['dynamic_value']}, {'key1': 'fixed_value', 'invalidlink': ['dynamic_value']}]
期望输出:
[{'key1': 'fixed_value', 'validlink': ['dynamic_value'], 'invalidlink': ['dynamic_value']}]
当前代码局限
你现在的代码只能处理单个validlink键,没法同时合并validlink和invalidlink:
out_a.setdefault(v['key1'], []).append(v['validlink']) new_dict = list(map(lambda x: dict(zip(('key1', 'validlink'), x)), out_a.items()))
可行解决方案
换个思路,用字典按key1分组,逐个合并每组里的所有键值对:
input_list = [ {'key1': 'fixed_value', 'validlink': ['dynamic_value']}, {'key1': 'fixed_value', 'invalidlink': ['dynamic_value']} ] merged_groups = {} for item in input_list: group_key = item['key1'] # 初始化分组字典 if group_key not in merged_groups: merged_groups[group_key] = {'key1': group_key} # 把当前字典里除key1外的键值对都合并进去 for k, v in item.items(): if k != 'key1': merged_groups[group_key][k] = v # 转成要求的列表格式 final_result = list(merged_groups.values()) print(final_result)
运行后会得到期望的输出:
[{'key1': 'fixed_value', 'validlink': ['dynamic_value'], 'invalidlink': ['dynamic_value']}]
补充说明
如果遇到同一个分组里有重复键(比如两个字典都有validlink),上面的代码会直接覆盖旧值。如果需要把列表内容合并(比如validlink是多个列表要合并成一个),可以把赋值部分改成:
if k in merged_groups[group_key]: merged_groups[group_key][k].extend(v) else: merged_groups[group_key][k] = v.copy()
内容的提问来源于stack exchange,提问作者ktm root
相关产品推荐
相关产品推荐

