Python如何将嵌套日期字典的同键数值按顺序聚合成列表?
实现方案
方案1:兼容性最强的写法(推荐)
用collections.defaultdict实现,自动处理键的初始化,且兼容内层字典键不完全一致的场景:
import datetime from collections import defaultdict d = {datetime.date(2013, 1, 1): {'15169': 2, '56203': 5, '2519': 3, '18144': 3, '9737': 4}, datetime.date(2014, 1, 1): {'15169': 5, '56203': 3, '2519': 2, '18144': 1, '9737': 0}} # 按日期升序排列外层元素,保证列表内数值的顺序符合时间先后 sorted_date_items = sorted(d.items(), key=lambda item: item[0]) result = defaultdict(list) for _, inner_dict in sorted_date_items: for str_key, value in inner_dict.items(): result[int(str_key)].append(value) # 按需转为普通字典 result = dict(result)
输出结果:
{15169: [2, 5], 56203: [5, 3], 2519: [3, 2], 18144: [3, 1], 9737: [4, 0]}
方案2:极简一行流
如果确认所有内层字典的键完全一致,可以用字典推导式实现更短的写法:
result = {int(k): [d[dt][k] for dt in sorted(d)] for k in next(iter(d.values()))}
注意事项
- 必须对外层的日期键做排序,Python 3.7之前的版本字典不保证插入顺序,不排序可能导致列表内数值顺序错误
- 如果存在部分内层字典缺少对应键的场景,可以把取值逻辑改为
d[dt].get(k, 0),用默认值(示例为0)填充缺失位
内容的提问来源于stack exchange,提问作者ribash sharma
相关产品推荐
相关产品推荐

