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

如何合并列表中同值字典?按FID和LEFT分组汇总时间

解决方案

明确需求:按FID和LEFT分组,累加同组的LTIME,同时将同FID下RIGHT匹配LEFT的RTIME汇总到对应组,最终整理为目标格式。

步骤1:编写时间转换工具函数

先把"分:秒"格式转成总秒数方便计算,再转换回字符串格式:

def time_to_sec(time_str):
    if not time_str:
        return 0
    mins, secs = map(int, time_str.split(':'))
    return mins * 60 + secs

def sec_to_time(total_sec):
    if total_sec == 0:
        return ''
    mins = total_sec // 60
    secs = total_sec % 60
    return f"{mins}:{secs:02d}"

步骤2:分组处理数据

用字典存储分组信息,键为(FID, LEFT),值记录该组的累计时间和RIGHT字段信息:

a = [{'ID': 1, 'FID': 938119, 'LEFT': 'A', 'LTIME': '1:10', 'RIGHT': '', 'RTIME': ''},
     {'ID': 2, 'FID': 938119, 'LEFT': 'B', 'LTIME': '1:55', 'RIGHT': '', 'RTIME': ''},
     {'ID': 3, 'FID': 938119, 'LEFT': '', 'LTIME': '', 'RIGHT': 'A', 'RTIME': '1:20'},
     {'ID': 4, 'FID': 938119, 'LEFT': 'A', 'LTIME': '1:56', 'RIGHT': '', 'RTIME': ''},
     {'ID': 5, 'FID': 938120, 'LEFT': 'A', 'LTIME': '1:36', 'RIGHT': '', 'RTIME': ''},
     ]

groups = {}

for item in a:
    fid = item['FID']
    left = item['LEFT']
    right = item['RIGHT']
    
    # 处理LEFT非空的条目,归入(FID, LEFT)组
    if left:
        key = (fid, left)
        if key not in groups:
            groups[key] = {
                'FID': fid,
                'LEFT': left,
                'total_ltime': 0,
                'total_rtime': 0,
                'RIGHT': ''
            }
        groups[key]['total_ltime'] += time_to_sec(item['LTIME'])
    
    # 处理RIGHT非空的条目,归入(FID, RIGHT)组
    if right:
        key = (fid, right)
        if key not in groups:
            groups[key] = {
                'FID': fid,
                'LEFT': right,
                'total_ltime': 0,
                'total_rtime': 0,
                'RIGHT': right
            }
        groups[key]['total_rtime'] += time_to_sec(item['RTIME'])
        groups[key]['RIGHT'] = right

步骤3:整理为目标格式

将分组结果转换为要求的列表结构,重新分配ID:

b = []
for idx, group in enumerate(groups.values(), start=1):
    b.append({
        'ID': idx,
        'FID': group['FID'],
        'LEFT': group['LEFT'],
        'LTIME': sec_to_time(group['total_ltime']),
        'RIGHT': group['RIGHT'],
        'RTIME': sec_to_time(group['total_rtime'])
    })

# 查看结果
import pprint
pprint.pprint(b)

运行输出

[{'ID': 1,
  'FID': 938119,
  'LEFT': 'A',
  'LTIME': '3:06',
  'RIGHT': 'A',
  'RTIME': '1:20'},
 {'ID': 2,
  'FID': 938119,
  'LEFT': 'B',
  'LTIME': '1:55',
  'RIGHT': '',
  'RTIME': ''},
 {'ID': 3,
  'FID': 938120,
  'LEFT': 'A',
  'LTIME': '1:36',
  'RIGHT': '',
  'RTIME': ''}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:23:55