能否基于字典键生成指定反向映射格式的输出?
实现字典的反向映射:按值的类型分组原键
当然可以实现!这本质上是一个反向映射的问题——我们需要把原字典中「值的前缀类型部分」作为新键,把对应的原键收集起来并拼接成逗号分隔的字符串作为新值。下面是具体的Python实现方案:
方法一:基础循环实现
不需要额外导入模块,用原生字典即可完成:
# 你的原字典 original_dict = {'a': 'NPRO,206', 'b': 'PREP,131', 'c': 'PRCL,120', 'd': 'NPRO,66'} # 初始化空字典存储结果 result_dict = {} # 遍历原字典的键值对 for original_key, value in original_dict.items(): # 拆分值,提取类型部分(比如"NPRO") type_key = value.split(',')[0] # 如果类型键还没在结果字典中,先初始化空列表 if type_key not in result_dict: result_dict[type_key] = [] # 将原键添加到对应类型的列表 result_dict[type_key].append(original_key) # 将列表转换为逗号分隔的字符串,得到最终格式 final_result = {k: ','.join(v) for k, v in result_dict.items()} print(final_result) # 输出结果:{'NPRO': 'a,d', 'PREP': 'b', 'PRCL': 'c'}
方法二:用collections.defaultdict简化代码
如果需要更简洁的写法,可以使用Python标准库中的defaultdict,它会自动为不存在的键初始化空列表:
from collections import defaultdict original_dict = {'a': 'NPRO,206', 'b': 'PREP,131', 'c': 'PRCL,120', 'd': 'NPRO,66'} # 初始化默认列表类型的字典 result_dict = defaultdict(list) for original_key, value in original_dict.items(): type_key = value.split(',')[0] result_dict[type_key].append(original_key) # 转换为目标格式 final_result = {k: ','.join(v) for k, v in result_dict.items()} print(final_result) # 输出结果与方法一完全一致
关键逻辑说明
- 拆分值提取类型:通过
split(',')[0]从值中分离出类型标识(比如从"NPRO,206"得到"NPRO");如果你的值格式可能有多个逗号,推荐用partition(',')[0],它只会拆分第一个逗号,更稳妥。 - 收集原键:将同一类型对应的原键存入列表,最后用
','.join()把列表拼接成逗号分隔的字符串。
内容的提问来源于stack exchange,提问作者4lll0w_3v1l
相关产品推荐
相关产品推荐

