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
相关产品推荐
相关产品推荐

