You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并列表中含相同元素的字典?Python实现求助

Python字典列表按New_PCP_Name分组合并

我来帮你搞定这个字典列表的合并问题!你的需求是按New_PCP_Name字段分组,把同一个医生下的患者信息合并成列表,单个患者的话保持原结构对吧?咱们一步步来解决:

一、处理现有字典列表的解决方案

你的尝试是逐个比较相邻元素,但这种方法没法处理超过两个相同分组的情况,而且逻辑不够完善。咱们换个思路:先用一个临时字典按New_PCP_Name分组收集数据,再转换成你需要的格式。

完整代码示例

# 你的原始数据
data = [
    {'New_PCP_Name': 'Jack0', 'Member_Name': 'Jack0, 0', 'Member_ID': '111', 'DOB': '111', 'PCP_ID':'111'},
    {'New_PCP_Name': 'Jack0', 'Member_Name': 'Jack00, 00', 'Member_ID': '222', 'DOB': '222', 'PCP_ID':'111'},
    {'New_PCP_Name': 'Jack1', 'Member_Name': 'Jack1, 1', 'Member_ID': '333', 'DOB': '333', 'PCP_ID':'333'},
    {'New_PCP_Name': 'Jack2', 'Member_Name': 'Jack2, 2', 'Member_ID': '444', 'DOB': '444', 'PCP_ID':'444'}
]

# 第一步:按New_PCP_Name分组收集数据
grouped = {}
for item in data:
    pcp_name = item['New_PCP_Name']
    pcp_id = item['PCP_ID']
    
    # 提取患者相关的信息
    member_info = {
        'Member_Name': item['Member_Name'],
        'Member_ID': item['Member_ID'],
        'DOB': item['DOB']
    }
    
    # 如果该医生还没在分组字典里,初始化条目
    if pcp_name not in grouped:
        grouped[pcp_name] = {
            'New_PCP_Name': pcp_name,
            'PCP_ID': pcp_id,
            'Member_Name': []
        }
    
    # 将患者信息加入对应医生的列表
    grouped[pcp_name]['Member_Name'].append(member_info)

# 第二步:转换成你需要的最终格式
result = []
for group in grouped.values():
    # 如果只有一个患者,把成员信息展开到外层字典
    if len(group['Member_Name']) == 1:
        single_member = group['Member_Name'][0]
        merged_item = {
            'New_PCP_Name': group['New_PCP_Name'],
            'PCP_ID': group['PCP_ID'],
            **single_member  # 展开单个患者的键值对
        }
        result.append(merged_item)
    # 多个患者保持列表格式
    else:
        result.append(group)

# 打印结果看看是否符合要求
import pprint
pprint.pprint(result)

代码说明

  1. 分组收集:用grouped字典作为容器,键是医生姓名,值是包含医生ID和患者列表的字典,这样能高效地把同一医生的患者归到一起。
  2. 格式转换:遍历分组后的结果,判断每个医生的患者数量:
    • 单个患者时,把患者的信息直接合并到外层字典,保持你要的原结构;
    • 多个患者时,保留患者列表的格式。

运行这段代码后,输出的result就是你想要的目标格式啦!

二、从Excel导入时直接生成目标格式

如果你是从Excel读取数据,可以用pandas库来简化流程,直接在导入后分组处理:

代码示例

import pandas as pd
import pprint

# 读取Excel文件(假设你的Excel文件名为data.xlsx,数据在第一个工作表)
df = pd.read_excel('data.xlsx')

# 按New_PCP_Name分组,处理每个组
result = []
for pcp_name, group_df in df.groupby('New_PCP_Name'):
    # 获取医生ID(同一医生的PCP_ID应该相同,取第一个即可)
    pcp_id = group_df['PCP_ID'].iloc[0]
    
    # 把每组的患者信息转换成字典列表
    member_list = group_df[['Member_Name', 'Member_ID', 'DOB']].to_dict('records')
    
    # 按患者数量生成对应格式的字典
    if len(member_list) == 1:
        merged_item = {
            'New_PCP_Name': pcp_name,
            'PCP_ID': pcp_id,
            **member_list[0]
        }
        result.append(merged_item)
    else:
        result.append({
            'New_PCP_Name': pcp_name,
            'PCP_ID': pcp_id,
            'Member_Name': member_list
        })

# 查看结果
pprint.pprint(result)

注意事项

  • 确保Excel里的列名和你字典里的键完全一致(比如New_PCP_Name、Member_Name等);
  • 如果还没安装pandas和openpyxl(用于读取Excel),可以用命令pip install pandas openpyxl安装。

内容的提问来源于stack exchange,提问作者user11809703

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:50