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

Python中为重复字典键添加后缀以保留所有键值对的方法

解决字典重复键覆盖问题:添加数字后缀保留所有条目

要实现你的需求,核心是先统计每个键的总出现次数,再根据次数决定是否添加数字后缀——只出现一次的键保留原名,多次出现的键按顺序添加数字后缀(从1开始)。

完整代码

items = ['name:John','age:25','Address:Chicago','Address:Phoenix','Address:Washington','email:John@email.com']

# 第一步:先统计所有键的总出现次数
key_total_counts = {}
for item in items:
    raw_key = item.split(':')[0]
    key_total_counts[raw_key] = key_total_counts.get(raw_key, 0) + 1

# 第二步:遍历生成带唯一键的字典
result_dict = {}
current_key_counter = {}

for item in items:
    raw_key, value = item.split(':', 1)  # split(':',1)避免值里包含冒号导致拆分错误
    current_key_counter[raw_key] = current_key_counter.get(raw_key, 0) + 1
    
    # 根据总次数决定键名
    if key_total_counts[raw_key] == 1:
        result_dict[raw_key] = value
    else:
        result_dict[f"{raw_key}{current_key_counter[raw_key]}"] = value

print(result_dict)

代码说明

  • 统计总次数:先遍历一次列表,记录每个键总共出现多少次,以此判断哪些键需要加后缀。
  • 生成唯一键:第二次遍历列表时,用current_key_counter记录当前键已出现的次数,结合总次数处理:
    • 总次数为1的键直接使用原名
    • 总次数大于1的键,拼接原始键+当前次数作为新键,保证唯一性
  • split(':',1):比单纯split(':')更健壮,能避免值里包含冒号(比如Address:123 Main St:NY)导致的拆分错误。

运行结果

{'name': 'John', 'age': '25', 'Address1': 'Chicago', 'Address2': 'Phoenix', 'Address3': 'Washington', 'email': 'John@email.com'}

原代码问题分析

你之前用dic.update({j[0]:j[1]})的方式,每次遇到相同键都会直接覆盖之前的键值对,所以最后只会保留每个键的最后一次出现的值,这就是为什么你得到的Address只有最后一个Washington。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:13:34