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

如何用Python删除JSON文件中大部分键?解决列表索引类型报错

问题分析与解决

错误原因

你遇到的list indices must be integers or slices, not str错误,核心问题是**tweet_list是列表类型**,你却把它当成字典用字符串索引["tweet"]访问,这不符合列表的索引规则(列表只能用整数或切片做索引)。另外直接遍历字典键并删除,还可能触发遍历过程中字典结构变化的运行时错误。

修正后的代码

推荐用创建新字典保留目标键的方式,更简洁安全:

import json

def read_json(json_file: str) -> list:
    tweets_data = []
    for tweet in open(json_file, 'r'):
        tweets_data.append(json.loads(tweet))
    return tweets_data

tags = ["created_at", "full_text"]
tweet_list = read_json('test.json')

# 遍历每条tweet,只保留指定键的新字典
filtered_tweets = [
    {key: tweet[key] for key in tags if key in tweet}
    for tweet in tweet_list
]

print(filtered_tweets[0])

如果一定要用删除键的方式,需要先遍历字典键的副本(避免遍历原字典时修改结构),同时注意遍历列表中的每个tweet元素:

import json

def read_json(json_file: str) -> list:
    tweets_data = []
    for tweet in open(json_file, 'r'):
        tweets_data.append(json.loads(tweet))
    return tweets_data

tags = ["created_at", "full_text"]
tweet_list = read_json('test.json')

# 遍历列表中的每条tweet
for tweet in tweet_list:
    # 遍历字典键的副本(用list()转换),避免遍历中修改字典
    for key in list(tweet.keys()):
        if key not in tags:
            del tweet[key]

print(tweet_list[0])

关键说明

  • read_json返回的是包含多个tweet字典的列表,必须通过整数索引(比如tweet_list[0])访问单条tweet,再操作其键值对。
  • 字典推导式的方式更高效,还能自动处理tweet中缺少目标键的情况(不会抛出KeyError)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 05:20:27