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
相关产品推荐
相关产品推荐

