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

Python列表用[:]取字段报索引类型错误 批量计算日期差怎么解决

错误原因

你触发报错的核心原因是:data['activities'][:]返回的是activities列表本身,Python原生列表不支持直接用字符串作为键,批量提取所有子元素的对应字段,所以才会抛出'list indices must be integers or slices, not str'的类型错误。

修复方案

不需要重写原有逻辑,仅需对activities列表加一层遍历即可,你原有的秒级时间差计算逻辑可以完全复用,修改后的完整代码如下:

import json
import datetime
import copy

# 读取json文件
with open('/Users/kenyacastellanos/Downloads/data.json') as json_data_file:
    data = json.load(json_data_file)
print(data)

# 打印前10条未排序数据
print("Sin ordenar:",data['activities'][:10])

## 按user_id字段排序
data['activities'].sort(key = lambda x: x['user_id'])

# 打印前10条排序后数据
print("Ordenamos:", data['activities'][:10])

# 批量计算所有条目的时间差
for activity in data['activities']:
    date1 = datetime.datetime.fromisoformat(activity['answered_at'])
    date2 = datetime.datetime.fromisoformat(activity['first_seen_at'])
    difference_date = (date1-date2)
    print(f"ID: {activity['id']}  Duration in seconds: {difference_date.seconds} {difference_date.microseconds}")

如果需要单独提取所有条目的answered_at或first_seen_at字段,也可以用列表推导式实现:

# 提取所有answered_at字段
all_answered_at = [item['answered_at'] for item in data['activities']]
# 提取所有first_seen_at字段
all_first_seen = [item['first_seen_at'] for item in data['activities']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:06:03