如何用defaultdict(list)批量初始化字典并直接传入自定义函数?
批量初始化字典并调用函数的高效方案
嘿,完全理解你不想手动写50次重复初始化代码的痛苦——这绝对是低效且容易出错的做法!咱们用更简洁的方式解决这个问题,核心思路是批量管理参数+循环自动处理,直接跳过手动创建50个字典变量的步骤。
先纠正一个小问题
你写的initialise函数其实没有实际作用:函数内部重新赋值了dict参数,返回的是新的defaultdict(list),但外部的变量根本不会被修改。所以完全不需要这个函数,直接在需要的地方创建defaultdict(list)即可。
最优解决方案
步骤很简单:
- 把所有需要传入的参数组整理成一个列表:每个元素是一个元组,包含对应
make_somefunction的custom_keys和custom_listofvalues。 - 循环遍历参数列表:每次自动创建新的
defaultdict(list),直接传入函数调用。
代码示例
from collections import defaultdict # 第一步:整理50组参数(这里示例写3组,你可以扩展到50组) param_groups = [ (animals, foods), # 对应原来的dict1参数 (patients, drugs), # 对应原来的dict2参数 (fridge, fruits), # 对应原来的dict3参数 # ... 剩下47组参数依次添加 ] # 第二步:批量调用函数,可选保存返回值 # 如果需要保存每个函数的返回结果,用列表存起来 results = [] for keys, values in param_groups: # 直接创建defaultdict并传入函数,无需单独定义变量 func_result = make_somefunction(defaultdict(list), keys, values) results.append(func_result) # 如果不需要保存返回值,直接循环调用即可 # for keys, values in param_groups: # make_somefunction(defaultdict(list), keys, values)
更简洁的写法(列表推导式)
如果需要收集所有返回值,一行代码就能搞定:
results = [make_somefunction(defaultdict(list), keys, values) for keys, values in param_groups]
为什么这方法更好?
- 代码简洁易维护:新增/删除参数组只需要修改
param_groups列表,不用改几十行重复代码。 - 避免变量污染:不需要创建50个命名混乱的字典变量(dict1、dict2...),直接在调用时临时创建。
- 扩展性强:如果以后需要处理100组参数,只需要扩展参数列表就行,逻辑完全不用改。
内容的提问来源于stack exchange,提问作者cms72
相关产品推荐
相关产品推荐

