Python如何基于多键值对匹配合并列表中字典的id字段
实现思路
- 第一步:以
entity、offsetstart、offsetend三个字段的取值组成的三元组作为唯一分组键,用临时字典存储分组结果 - 第二步:遍历原始列表的所有字典元素,对每个元素:
- 若对应分组键不存在于临时字典,直接将当前元素存入临时字典
- 若对应分组键已存在,将当前元素的
id追加到已有元素的id字段中,单条id为字符串,多条自动转为列表存储
- 第三步:提取临时字典的所有值,转为列表即为目标结果
代码实现
original_list = [ {'entity': 'Mechanical properties', 'offsetstart': 0, 'offsetend': 21, 'id': 'c_4683'}, {'entity': 'properties', 'offsetstart': 11, 'offsetend': 21, 'id': 'c_49874'}, {'entity': 'properties', 'offsetstart': 11, 'offsetend': 21, 'id': 'c_13609'}, {'entity': 'wood', 'offsetstart': 33, 'offsetend': 37, 'id': 'c_8421'} ] temp_dict = {} for item in original_list: # 生成分组键 group_key = (item['entity'], item['offsetstart'], item['offsetend']) if group_key not in temp_dict: # 新分组直接存入 temp_dict[group_key] = item.copy() else: # 已有分组合并id existing_id = temp_dict[group_key]['id'] if isinstance(existing_id, str): # 之前只有单个id,转成列表再加新id temp_dict[group_key]['id'] = [existing_id, item['id']] else: # 已经是列表直接追加 existing_id.append(item['id']) # 转成结果列表 result = list(temp_dict.values()) print(result)
运行上述代码输出的结果与需求完全一致。
内容的提问来源于stack exchange,提问作者Erwin
相关产品推荐
相关产品推荐

