如何根据字典键名自动分组生成对应新字典?
实现思路与示例代码
核心思路拆解
- 提取分组前缀:从原字典的键中分离出分组标识(比如
Industry1中的Industry),可以通过字符串遍历找第一个数字的位置,或者用正则表达式匹配前缀部分。 - 构建分组容器:创建存储各分组的字典(或直接生成独立变量),每个分组对应一个空字典,用来存放对应键值对。
- 分配键值对:遍历原字典的所有键值对,根据前缀将其归入对应的分组字典中。
具体实现示例
方式1:用字典统一管理所有分组
这种方式更安全易维护,避免创建过多全局变量:
import re A = { "Industry1": 1, "Industry2": 1, "Industry3": 1, "Customer1": 1, "Customer2": 1, "LocalShop1": 1, "LocalShop2": 1, } # 初始化分组字典 groups = {} for key, value in A.items(): # 用正则匹配数字前的所有非数字字符作为前缀 prefix = re.match(r'^\D+', key).group() # 前缀不存在则创建空字典 if prefix not in groups: groups[prefix] = {} # 将键值对加入对应分组 groups[prefix][key] = value # 输出每个分组 for name, group_dict in groups.items(): print(f"{name} = {group_dict}")
方式2:生成独立的全局变量
如果一定要生成Industry = {...}这种独立变量,可以用globals()实现(注意:仅在信任的代码环境中使用,避免安全风险):
import re A = { "Industry1": 1, "Industry2": 1, "Industry3": 1, "Customer1": 1, "Customer2": 1, "LocalShop1": 1, "LocalShop2": 1, } for key, value in A.items(): prefix = re.match(r'^\D+', key).group() # 全局变量中无该分组则初始化空字典 if prefix not in globals(): globals()[prefix] = {} globals()[prefix][key] = value # 验证结果 print(Industry) print(Customer) print(LocalShop)
注意点
- 你给出的预期输出中
LocalShop2写成了LolcalShop2,这应该是笔误,代码会保留原字典的正确键名。 - 如果分组前缀不是通过数字区分,可调整前缀提取逻辑,比如按特定分隔符拆分,或预先定义前缀列表匹配。
内容的提问来源于stack exchange,提问作者Hapzek
相关产品推荐
相关产品推荐

