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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:48:04