如何将嵌套defaultdict默认值设为指定长度的列表?
实现嵌套defaultdict并设置默认值为[0,0,0]
当然可以直接通过设置嵌套的defaultdict来实现你的需求,不用再手动逐个添加字典项!
核心实现思路
你需要构建两层嵌套的defaultdict:
- 外层是一个
defaultdict,当访问不存在的年份键(比如year2019)时,自动生成一个内层的defaultdict - 内层的
defaultdict的默认工厂函数返回你指定的[0, 0, 0]列表,这样访问不存在的温度区间键时,会自动填充这个默认值
代码示例
from collections import defaultdict # 定义嵌套的defaultdict结构 dic01 = defaultdict(lambda: defaultdict(lambda: [0, 0, 0])) # 直接赋值已有数据,和你原来的操作一致 dic01['year2017']['jul_to_sep_temperature'] = [25, 20, 17] dic01['year2017']['oct_to_dec_temperature'] = [10, 8, 7] dic01['year2018']['jan_to_mar_temperature'] = [8, 9, 10] # 访问不存在的键时,自动生成默认值[0,0,0] print(dic01['year2018']['apr_to_jun_temperature']) # 输出: [0, 0, 0] # 甚至可以直接访问完全不存在的年份和区间 print(dic01['year2019']['jul_to_sep_temperature']) # 输出: [0, 0, 0]
额外小技巧:转换为普通字典
如果后续需要把这个嵌套的defaultdict转换成普通字典(比如用于JSON序列化),可以用字典推导式快速转换:
# 转换为普通字典结构 normal_dic = { year: {period: temps for period, temps in season_data.items()} for year, season_data in dic01.items() }
这样就能完全替代你之前手动添加项的方式,而且更高效、更灵活!
内容的提问来源于stack exchange,提问作者maynull




