Python字典无法存储重复键?代码重复条目丢失问题求助
Python字典处理重复键的解决方法
Python的字典(dict)核心特性就是键的唯一性——当你给同一个键重复赋值时,新值会直接覆盖旧值,这就是你只看到最后一个Alex条目的原因。
下面是两种常用的解决思路:
1. 让字典键对应多个值
把字典的值设为列表,存储同一个键对应的所有条目,这样就能保留所有同名人员的信息:
基础写法
# 示例输入的会议人员字符串拆分后的列表 attendees = ["Alex:Cornwell", "Alex:Korn", "Bob:Smith"] attendee_dict = {} for item in attendees: name, lastname = item.split(":") # 检查键是否存在,不存在则初始化空列表 if name not in attendee_dict: attendee_dict[name] = [] attendee_dict[name].append(lastname) print(attendee_dict) # 输出: {'Alex': ['Cornwell', 'Korn'], 'Bob': ['Smith']}
用collections.defaultdict简化
借助标准库的defaultdict,可以省去判断键是否存在的步骤:
from collections import defaultdict attendees = ["Alex:Cornwell", "Alex:Korn", "Bob:Smith"] attendee_dict = defaultdict(list) for item in attendees: name, lastname = item.split(":") attendee_dict[name].append(lastname) # 转换为普通字典输出(可选) print(dict(attendee_dict)) # 输出: {'Alex': ['Cornwell', 'Korn'], 'Bob': ['Smith']}
2. 放弃字典,用列表存储完整条目
如果不需要用键值对的结构,直接用列表存储元组(或自定义对象),可以完整保留所有原始条目:
attendees = ["Alex:Cornwell", "Alex:Korn", "Bob:Smith"] # 拆分每个条目为元组,存入列表 attendee_list = [tuple(item.split(":")) for item in attendees] print(attendee_list) # 输出: [('Alex', 'Cornwell'), ('Alex', 'Korn'), ('Bob', 'Smith')]
后续需要筛选特定名字的条目时,用列表推导式即可:
alex_entries = [entry for entry in attendee_list if entry[0] == "Alex"] print(alex_entries) # 输出: [('Alex', 'Cornwell'), ('Alex', 'Korn')]
内容的提问来源于stack exchange,提问作者Renato Martins
相关产品推荐
相关产品推荐

