在for循环中自动更改索引

2024-05-13 21:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JSON文件,我从中提取了一个列表

我尝试使用列表索引从列表中获取其他项,但出现了此错误

TypeError:列表索引必须是整数或片,而不是str

    for name in data['athletes'][0:]['athlete']['displayName']:
        print(name)

如果在索引中不使用冒号,它会提取名字


Tags: 文件nameinjson列表fordata错误
3条回答

这是data的类型,对吗

data: Dict[str, List[Dict[str, Dict[str, str]]]]

因此:

data['athletes'][0]: Dict[str, Dict[str, str]]
data['athletes'][0:]: List[Dict[str, Dict[str, str]]]

当你切片data['athletes'](通过[0:])时,你会得到List,你不能通过字符串索引它。当您得到一个特定的元素(通过[0])时,您就得到了List中的第一个Dict

其他答案已经建议如何打印姓名。如果你想把它们变成一个列表,下面是你如何通过理解来做到这一点(我认为这是你试图用切片来做的):

names = [entry['athlete']['displayName'] for entry in data['athletes']]

你可能想要:

for athlete in data['athletes']
    print(athlete['athlete']['displayName']

但是如果没有看到你的JSON就不可能确定

您正在指定:

for name in data['athletes'][0:]['athlete']['displayName']:
    print(name)

大概data['athletes'][0]是一本字典。但是说data['athletes'][0:],实际上是复制了整个列表。试图从列表中提取一个键值'displayName',这是一个字符串,没有任何意义,因此会出现错误(只能按整数索引列表)。当然,那不是你的本意。您只需要列表的第0个元素,所以删除冒号

如果列表中的每个元素data['athletes']都是一个带有键athlete的字典,您可以查看Daniel Roseman(@DanielRoseman)发布的答案

相关问题 更多 >