在Python上读取和操作JSON元素

在Python上读取和操作JSON元素,python,json,list,Python,Json,List,我是一名python新手,需要从json文件中读取和操作元素,但我不断出错,不知道如何继续前进。这是我的代码: import json with open('file.txt', 'r') as json_data: d = json.load(json_data) 数据集的一个示例: [ { 'id': 1, 'name': 'a', 'city': 'Paris' }, { 'id': 2,

我是一名python新手,需要从json文件中读取和操作元素,但我不断出错,不知道如何继续前进。这是我的代码:

import json 
with open('file.txt', 'r') as json_data:
    d = json.load(json_data)
数据集的一个示例:

[
    {
        'id': 1,
        'name': 'a',
        'city': 'Paris'
    },
    {
        'id': 2,
        'name': 'b',
        'city': 'Mons'
    },
    {
        'id': 3,
        'name': 'c.',
        'city': 'Leuven'
    }
]
当我尝试仅获取
id
name
时,会出现以下错误:

city = d['city']
TypeError回溯(最近一次调用上次)

在()

---->1城市=d[“城市”]

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

然后我试了一下:

city = d[:]['city']
TypeError回溯(最近一次调用上次)

在() ---->1城市=d[:][“城市”]

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


有什么想法吗?谢谢

您可以编写一个循环来遍历每个对象

final=[]
for obj in d:
    final.append(obj['city'])
或者你可以试着用这个

final = [obj['city'] for obj in d]
或者,如果只需要第一个值

print(d[0]['city'])
输出

“巴黎”


由于您的数据是一个字典列表,因此必须使用索引值来获取字典中的数据

,因为这是列表中的一个字典,您必须在通过键调用值之前提供一个列表索引。这应该起作用:

dict = d[0]
city = dict['city']
或者您可以简单地使用:

city = d[0]['city']

您很可能不想知道正在查找的元素的数组索引

有了一些pythonic风格,您可以使用如下方式创建:

arr = [(dict['id'], dict['city']) for dict in d]
输出将是

[(1, 'Paris'),
(2, 'Mons'),
(3, 'Leuven')]
然后,如果需要,您可以只获取元组中的特定项

例:


对于城市属性中包含“s”的每个条目,它将返回
id
name

那么
city=d[0]['city']
呢?尝试循环insteadIt是一个列表,正如Arvind指出的,你应该尝试将列表索引放在字典键之前。Hari,非常感谢你的回答。还有一件事,如何将此输出保存到另一个列表?再次感谢您的时间和耐心:)我已经添加了将城市添加到列表的代码。谢谢Hari,我以前试过,我觉得我写错了什么。我还是会犯同样的错误。我真的不明白:(
TypeError:列表索引必须是整数或片,而不是str
我添加了另一种获取值列表的方法。请尝试将空列表作为输出
[]
。是否有方法将列表作为字符串获取?
arr = [(dict['id'], dict['city']) for dict in d if 's' in dict['city']]