如何根据键名前缀及给定数组拆分Python字典为多个子字典
实现方案
首先注意不要用dict作为变量名,会覆盖Python内置的dict类型,建议重命名为origin_dict。
推荐先用一个总字典收纳所有拆分后的子字典,取值、遍历都更方便,如果需要单独的dict1/dict2变量也可以额外生成,完整实现如下:
origin_dict = {'1_100': 50, '1_102': 100, '2_100': 150, '2_102': 200, '3_100': 50, '3_102': 100} narray = [1, 2, 3, 4, 5] # 总结果字典,key是前缀,value是对应拆分后的子字典 result = {} # 提前把narray转成字符串集合,匹配效率更高 valid_prefix = set(map(str, narray)) for k, v in origin_dict.items(): # 取键名下划线前的前缀 prefix = k.split('_')[0] # 仅处理在narray中存在的前缀 if prefix not in valid_prefix: continue # 对应前缀的子字典不存在则自动创建 if prefix not in result: result[prefix] = {} result[prefix][k] = v # (可选)如果需要生成单独的dict1、dict2变量,加下面这段即可 for prefix, sub_dict in result.items(): globals()[f'dict{prefix}'] = sub_dict
运行后result的结构为:
{ '1': {'1_100': 50, '1_102': 100}, '2': {'2_100': 150, '2_102': 200}, '3': {'3_100': 50, '3_102': 100} }
生成单独变量后,可直接调用dict1/dict2/dict3,完全符合你期望的输出格式。
这个方案适配任意数量的前缀、任意数量的同前缀键,不需要提前固定拆分规则。
内容的提问来源于stack exchange,提问作者Momo
相关产品推荐
相关产品推荐

