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

Python字典缩短key长度时重复key覆盖值如何解决

解决方案

你遇到的覆盖问题是因为同前缀键重复赋值导致,只需要把相同新键对应的所有值收集到列表中即可,以下是两种可行实现:

方案1:使用collections.defaultdict(可读性高)

from collections import defaultdict

d1 = {
    'A0Z40': [ 'A14160,A14161,A14162,A14163,A14164,A14165,A14166' ],
    'A0Z41': [ 'A1403,A1407,A1408,A1409,A1410,A1411' ],
    'A0Z42': [ 'A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046' ],
    'A0Z43': [ 'A1101' ]
}

# 初始化值默认是空列表的字典
new_dict = defaultdict(list)
for old_key, value in d1.items():
    new_key = old_key[:3]
    new_dict[new_key].append(value)

# 可选:如果需要转换为普通字典,执行下方语句
# new_dict = dict(new_dict)

方案2:使用原生字典setdefault(无需导入依赖)

new_dict = {}
for old_key, value in d1.items():
    new_key = old_key[:3]
    # 若新键不存在则先赋值为空列表,再追加值
    new_dict.setdefault(new_key, []).append(value)

输出说明

你给出的预期结果语法不符合Python字典规范,合法的输出结构如下,和你预期的存储效果完全一致:

{
    'A0Z': [
        ['A14160,A14161,A14162,A14163,A14164,A14165,A14166'],
        ['A1403,A1407,A1408,A1409,A1410,A1411'],
        ['A1201,A1205', 'A12041,A12042,A12043,A12044,A12045,A12046'],
        ['A1101']
    ]
}

如果不需要保留原value的子列表结构,想要把所有字符串合并到同一个一级列表中,只需要把代码里的append(value)改为extend(value)即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:06