如何基于列表元素创建同名空字典?结合configparser读取配置
解决方法:动态创建同名字典并读取配置
原代码的问题在于循环里的each = {}只是修改了循环变量的指向,并没有真正创建one、two、three这些同名字典变量,循环结束后不会留下这些独立的变量。下面提供两种可行的实现方式:
方法1:动态创建同名变量(不推荐)
通过globals()函数直接操作全局命名空间,创建与列表元素同名的字典变量:
import configparser # 读取配置文件 config = configparser.ConfigParser() config.read('你的配置文件路径.ini') business = ['one','two','three'] for name in business: # 读取对应配置,get方法避免键不存在时报错 regex_content = config['business'].get(name, '') # 动态创建同名空字典 globals()[name] = {} # 可选:将正则内容拆分后存入字典 if regex_content: globals()[name]['regex_list'] = regex_content.split('|')
执行后就可以直接使用one、two、three作为字典变量,比如one['data'] = '示例数据'。但这种方式会污染全局命名空间,不推荐在复杂项目中使用。
方法2:用主字典统一管理(推荐)
创建一个主字典,把所有业务对应的子字典存放在其中,既清晰又不会污染命名空间:
import configparser config = configparser.ConfigParser() config.read('你的配置文件路径.ini') business = ['one','two','three'] # 主字典,用于管理所有业务对应的字典 business_collections = {} for name in business: regex_content = config['business'].get(name, '') # 创建空字典并存入主字典 business_collections[name] = {} # 可选:存入处理后的正则配置 business_collections[name]['regex_list'] = regex_content.split('|') if regex_content else []
后续操作时通过主字典的键访问对应子字典,比如business_collections['one']['new_data'] = '新数据',这种方式更符合Python编码规范,便于维护。
内容的提问来源于stack exchange,提问作者fjr1300
相关产品推荐
相关产品推荐

