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

