如何在Python中按相同索引分组多列表的重复项?
按姓名分组关联多列表数据的解决方案
你可以用Python的字典来实现分组,推荐使用collections.defaultdict简化操作,它能自动处理键不存在的情况,避免冗余判断。以下是完整实现代码:
from collections import defaultdict name_list = ["trung", "key", "trung","kayla","john","trung","key"] id_list = ["123", "456", "789", "852", "545", "915", "712"] summary_list = ["aa12", "bb99", "cc66", "dd854", "ee842", "ff723", "gg413"] version_list = ["a01", "a22", "a23", "a94", "a05", "a42", "a34"] # 初始化分组字典,每个键对应包含三个空列表的字典 grouped_data = defaultdict(lambda: {"ids": [], "summaries": [], "versions": []}) # 按索引配对多列表数据,完成分组 for name, id_val, summary, version in zip(name_list, id_list, summary_list, version_list): grouped_data[name]["ids"].append(id_val) grouped_data[name]["summaries"].append(summary) grouped_data[name]["versions"].append(version) # 格式化输出所有分组结果 for name, data in grouped_data.items(): print(f"Name: {name.capitalize()}") print(f"id_list = {data['ids']}") print(f"summary_list = {data['summaries']}") print(f"version_list = {data['versions']}") print() # 空行分隔不同分组
关键逻辑说明:
zip()函数:将四个列表按索引一一配对,每次循环取出同一位置的姓名、id、摘要和版本数据。defaultdict:预设默认值为包含三个空列表的字典,首次遇到新姓名时会自动创建对应结构,无需手动判断键是否存在。- 分组逻辑:遍历过程中把对应数据追加到对应姓名的列表中,自动完成聚合。
- 输出处理:遍历分组后的字典,用
capitalize()让姓名首字母大写,完全匹配你需要的输出格式。
这段代码会输出所有姓名的分组结果,包括只出现一次的kayla和john,既不会产生重复内容,也不会遗漏任何项。
内容的提问来源于stack exchange,提问作者Lamshortforlamborghini
相关产品推荐
相关产品推荐

