在Python上读取和操作JSON元素

时间:2018-09-14 06:39:22

标签: 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,
        'name': 'b',
        'city': 'Mons'
    },
    {
        'id': 3,
        'name': 'c.',
        'city': 'Leuven'
    }
]

当我尝试仅获取idname时,出现此错误:

city = d['city']
  

TypeError跟踪(最近一次通话最近)

     

in()

     

----> 1个城市= d ['city']

     

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

然后我尝试了这个:

city = d[:]['city']
  

TypeError跟踪(最近一次通话最近)

     

在()中   ----> 1个城市= d [:] ['city']

     

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

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

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

具有某些Python风格,您可以使用tuples创建list comprehension,如下所示:

arr = [(dict['id'], dict['city']) for dict in d]

输出应为

[(1, 'Paris'),
(2, 'Mons'),
(3, 'Leuven')]

然后,您可以根据需要在元组中仅获取特定项目。

例如:

arr = [(dict['id'], dict['city']) for dict in d if 's' in dict['city']]

对于在city属性中每个包含“ s”的条目,其将返回idname

答案 1 :(得分:0)

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

final=[]
for obj in d:
    final.append(obj['city'])

或者您可以尝试使用此

final = [obj['city'] for obj in d]

或者,如果您只需要第一个值,则

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

输出

  

“巴黎”

由于您的数据是词典列表,因此您必须使用索引值才能在字典中获取数据