Python如何将元组列表按患者分组并聚合对应就诊记录为列表
Python 实现患者就诊记录分组方案
方法1:使用 collections.defaultdict 实现(推荐,简洁易读)
这是Python中处理分组需求最常用的实现方式,性能和可读性都较好:
from collections import defaultdict # 输入示例 input_list = [(patient1, visit), (patient2, visit), (patient1, visit)] # 初始化分组字典,默认值为空列表 group_dict = defaultdict(list) for patient, visit in input_list: group_dict[patient].append(visit) # 转换为要求的元组列表格式 output = list(group_dict.items())
执行后output就符合你需要的[(patient1, [visit, visit]), (patient2, [visit])]格式。
方法2:使用functools.reduce实现(适配你参考JS reduce的思路)
如果你想沿用类似JavaScript的reduce思路实现,Python中可以用functools.reduce完成:
from functools import reduce from collections import defaultdict # 输入示例 input_list = [(patient1, visit), (patient2, visit), (patient1, visit)] # reduce实现分组 group_dict = reduce( lambda acc, item: acc[item[0]].append(item[1]) or acc, input_list, defaultdict(list) ) # 转换为要求的元组列表格式 output = list(group_dict.items())
这里的lambda逻辑和JS reduce的回调逻辑一致:acc是累计的分组字典,每遍历一个元素就把就诊记录追加到对应用户的列表中,最终返回累计字典。
补充说明
- Python 3.7及以上版本中,字典默认保留插入顺序,最终输出的患者顺序和你输入中首次出现的患者顺序一致;如果使用更低版本且需要保序,可以将
defaultdict(list)替换为OrderedDict(),需提前从collections导入OrderedDict。 - 如果患者标识是不可哈希的类型(比如列表),需要先转为可哈希类型(比如元组)再作为字典的key使用。
内容的提问来源于stack exchange,提问作者Israel kusayev
相关产品推荐
相关产品推荐

