You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字典列表按共同值分组排序生成嵌套结构

实现方案

前置说明

你给出的原始数据中第一条记录的storageDate字段未加引号,Python会将2022-12-22识别为算术运算2022 - 12 - 22,结果为1988,属于输入笔误,以下实现默认修正为字符串格式'2022-12-22'。

实现代码

from collections import defaultdict

# 原始数据(已修正第一条storageDate的格式问题)
listofDictRecords = [{'storageID': 1, 'storageDate': '2022-12-22', 'volume':1.5}, 
    {'storageID': 1, 'storageDate': '2022-12-24', 'volume':3.5},
    {'storageID': 2, 'storageDate': '2022-12-25', 'volume':4.5},
    {'storageID': 2, 'storageDate': '2022-12-26', 'volume':5.5},
    {'storageID': 1, 'storageDate': '2022-12-23', 'volume':2.5}]

# 第一步:按storageID分组
grouped = defaultdict(list)
for record in listofDictRecords:
    # 提取需要存入子列表的字段
    date_volume = {
        'storageDate': record['storageDate'],
        'volume': record['volume']
    }
    grouped[record['storageID']].append(date_volume)

# 第二步:每组内按storageDate升序排序,组装最终结果
requireOutput = []
for sid, dv_list in grouped.items():
    # 按storageDate字段排序,YYYY-MM-DD格式的字符串可直接排序得到正确时间顺序
    dv_list_sorted = sorted(dv_list, key=lambda x: x['storageDate'])
    requireOutput.append({
        'storageID': sid,
        'storageDateVolume': dv_list_sorted
    })

# 打印验证结果
print(requireOutput)

如果不想引入collections依赖,也可以用普通Python字典实现分组,替换第一步的分组逻辑即可:

grouped = {}
for record in listofDictRecords:
    sid = record['storageID']
    date_volume = {'storageDate': record['storageDate'], 'volume': record['volume']}
    if sid not in grouped:
        grouped[sid] = []
    grouped[sid].append(date_volume)

内容的提问来源于stack exchange,提问作者Rihazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:48:01