如何从导入的Python文件中选取部分不等长列表批量生成字典
可扩展实现方案
你可以通过遍历模块属性自动筛选符合要求的列表,不用手动逐个输入列表名,下面提供两种常用的实现思路:
方案1:自动过滤+排除名单(适合快速筛选50选48的场景)
你只需要提前定义不需要纳入字典的2个列表名,程序会自动抓取模块内所有剩下的列表生成字典:
import a_py_file # 仅需要配置要排除的2个列表名,无需修改其他逻辑 EXCLUDE_LIST_NAMES = {'color', 'name'} one_dictionary = {} # 遍历导入模块的所有属性 for attr_name in dir(a_py_file): # 跳过系统自带的魔法属性、私有属性 if attr_name.startswith('_'): continue # 跳过你指定要排除的列表 if attr_name in EXCLUDE_LIST_NAMES: continue # 获取属性值 attr_val = getattr(a_py_file, attr_name) # 仅保留值为列表的属性 if isinstance(attr_val, list): one_dictionary[attr_name] = attr_val
如果后续要调整排除的列表,只需要修改EXCLUDE_LIST_NAMES即可,扩展性极强。
方案2:预定义导出清单(适合稳定性要求更高的场景)
如果担心模块内的其他非业务列表被误抓取,可以在a_py_file.py内提前定义好要导出的列表清单,后续修改导出范围只需要调整清单即可:
- 首先在
a_py_file.py末尾添加如下代码:
# 方法A:手动维护要导出的48个列表名 EXPORT_LISTS = [ 'fruits', 'location', 'idk', # 剩余45个列表名 ] # 方法B:自动生成导出清单,仅需要配置排除项,不用手动写48个名字 EXCLUDE_LISTS = {'color', 'name'} EXPORT_LISTS = [ k for k, v in locals().items() if not k.startswith('_') and isinstance(v, list) and k not in EXCLUDE_LISTS ]
- 导入时直接遍历清单生成字典:
import a_py_file one_dictionary = { list_name: getattr(a_py_file, list_name) for list_name in a_py_file.EXPORT_LISTS }
这种方案不会受到模块内新增的其他无关列表的影响,稳定性更高。
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

