Чтение и управление элементами JSON на Python - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в 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 Traceback (последний последний вызов)

in ()

----> 1 city = d ['city']

TypeError: индексы списка должны быть целыми или кусочками, а не str

Тогда я попробовал это:

city = d[:]['city']

TypeError Traceback (последний вызов последнего)

in () ----> 1 city = d [:] ['city']

TypeError: индексы списка должны быть целыми или кусочками, а не str

Есть идеи?Спасибо!

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Поскольку это словарь в списке, вы должны предоставить индекс списка перед вызовом значения по ключу.Это должно работать:

dict = d[0]
city = dict['city']

Или вы можете просто использовать:

city = d[0]['city']
0 голосов
/ 14 сентября 2018

Скорее всего, вы не хотите знать индекс массива искомого элемента.

С некоторым питоническим оттенком, вы можете создать кортежи с пониманием списка следующим образом:

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

Вывод будет

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

Тогда у вас есть возможность получить только определенные предметы в ваших кортежах, если это необходимо.

Ex:

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

, который будет возвращать id и name для каждой записи, которая содержит 's' в свойстве города.

0 голосов
/ 14 сентября 2018

Вы можете написать цикл для прохождения каждого объекта

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

Или вы можете попробовать использовать это

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

Или, если вам нужно только первое значение, тогда

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

Вывод

'Paris'

Поскольку ваши данные представляют собой список словарей, вам придется использовать значение индекса, чтобы получить данные всловарь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...