Python按partial key分组JSON:按月份分组代码最后一行逻辑疑问
按月份分组代码逻辑详解
前置说明
你用到的defaultdict(list)是Pythoncollections模块提供的扩展字典类型,核心特性是访问不存在的键时,会自动将该键的值初始化为你指定类型的空实例(这里是空列表),省去了普通字典需要手动判断键是否存在、手动初始化空列表的冗余代码。
遍历流程梳理
代码遍历的是你存储所有天气数据的列表d,每一次循环处理单条JSON数据对象:
- 取出当前数据的Unix时间戳值
json_obj["timestamp"] - 调用
datetime.fromtimestamp()将纯数字的Unix时间戳转换为包含完整年、月、日、时分秒信息的datetime对象dt_obj - 将原数据里的数字时间戳替换为格式化的可读字符串
%Y-%m-%d %H:%M:%S - 最后一行就是完成分组的核心逻辑
最后一行的运行逻辑拆解
你可以把month_data[dt_obj.strftime("%Y-%m")].append(json_obj)拆成两个步骤理解:
第一步:获取对应月份的存储列表
首先执行dt_obj.strftime("%Y-%m"),将当前数据的datetime对象格式化为年-月格式的字符串(比如你示例里的三个数据对应的时间戳都属于2000年1月,得到的字符串就是2000-01),用这个字符串作为键去month_data中取值:
- 如果这个
年-月键是第一次出现,defaultdict会自动创建该键,对应值为空列表 - 如果该键已经存在,直接返回之前已经存储了同月份其他数据的列表
第二步:存入当前数据
调用列表的append()方法,把处理好的当前单条JSON对象,追加到对应月份的列表末尾。
遍历完全部数据后,month_data的所有键就是所有数据覆盖到的年-月值,每个键对应的值就是该月份的所有天气数据列表。
内容的提问来源于stack exchange,提问作者aerioeus
相关产品推荐
相关产品推荐

