如何按指定键值对合并列表中的多个字典并将其余字段存入other_cols
Python 按指定键合并列表内字典实现
需求说明
我们需要对列表中的多个字典按照指定键的键值对进行合并:若多个字典的指定键对应的键值对完全一致,则将这些字典的其余键值对统一归集到other_cols字段下。
输入输出示例
输入参数
# 待处理的字典列表 input_list = [{'a': 1, 'b' : 2, 'c': 3, 'd': 4}, {'a': 1, 'b' : 2, 'c': 5, 'd': 6}, {'a': 9, 'b' : 10, 'c': 11, 'd': 12}, {'a': 9, 'b' : 10, 'c': 13, 'd': 14}, {'a': 9, 'b' : 10, 'c': 15, 'd': 16}, {'a': 17, 'b' : 18, 'c': 19, 'd': 20}, {'a': 1, 'b' : 2, 'c': 7, 'd': 8}] # 指定的合并键列表 merge_by_keys = ['a','b']
预期输出
expected_output_list = [ {'a': 1, 'b' : 2, 'other_cols':[{'c': 3, 'd': 4}, {'c': 5, 'd': 6}, {'c': 7, 'd': 8}]}, {'a': 9, 'b' : 10, 'other_cols':[{'c': 11, 'd': 12}, {'c': 13, 'd': 14}, {'c': 15, 'd': 16}]}, {'a': 17, 'b' : 18, 'other_cols':[{'c': 19, 'd': 20}]} ]
实现代码
我们可以用collections.defaultdict做临时分组容器完成分组,再转换为目标格式:
from collections import defaultdict def merge_dicts_by_keys(input_list, merge_by_keys): group_dict = defaultdict(list) for item in input_list: # 生成分组唯一标识 group_key = tuple(item[key] for key in merge_by_keys) # 提取非合并键的键值对 other_cols = {k:v for k,v in item.items() if k not in merge_by_keys} group_dict[group_key].append(other_cols) # 转换为目标输出结构 output = [] for group_key, other_cols_list in group_dict.items(): res_item = dict(zip(merge_by_keys, group_key)) res_item['other_cols'] = other_cols_list output.append(res_item) return output
调用验证
result = merge_dicts_by_keys(input_list, merge_by_keys) print(result)
运行后输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者RH-NewDeveloper
相关产品推荐
相关产品推荐

