извлечение подключа из вложенного словаря с использованием python3 - PullRequest
0 голосов
/ 23 января 2020

У меня есть этот словарь, в котором я хотел бы получить значение 'id'. Что было бы лучшим способом?

dict = {'total': 2, 'page': 0, 'pageSize': 10, 'count': 2, 'results': [{'id': 3, 'domainId': 1}]}

Я пытался:

      print (dict['id'])

E KeyError: 'id'

, если я печатаю ключи я получаю только:

['total', 'page', 'pageSize', 'count', 'results']

Ответы [ 5 ]

1 голос
/ 23 января 2020

Перво-наперво, не называйте вашу переменную dict, так как это имя словаря типа Python, поэтому вы в настоящее время перезаписываете эту функцию.

Давайте назовем его d.

d = {
  'total': 2, 
  'page': 0, 
  'pageSize': 10, 
  'count': 2, 
  'results': [
    {'id': 3, 'domainId': 1}
  ]
}

Здесь мы видим, что d['results'] - это то, что мы хотим запросить для идентификатора. Это список, поэтому я хотел бы спросить, хотите ли вы всегда иметь в виду первое или все, или просто последнее.

Если бы это был я, я сначала извлек бы все идентификаторы, а затем получил бы тот, который на самом деле хотел.

Мы можем получить все идентификаторы в виде списка с помощью:

[r['id'] for r in d['results'] if 'id' in r]

Это означает, что если бы results был следующим списком, мы получили бы следующие идентификаторы:

d['results'] == [
  {'id': 3, 'domainId': 1},
  {'id': 4},
  {'domainId': 2},
  {'giraffe': True}
]

ids = [r['id'] for r in d['results'] if 'id' in r]

ids == [3, 4]

В этот момент мы можем обработать все идентификаторы или просто получить первый (ids[0]) или последний (ids[-1]).


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

d['results'][-1]['id']
0 голосов
/ 23 января 2020
value = dict['results'][0]['id']

Вы используете dict['results'] для доступа к списку, в котором первый элемент [0] - это словарь, в котором вы, наконец, можете получить значение [id].

0 голосов
/ 23 января 2020

dict['results'][0]['id'] получает это значение. Наличие вложенного словаря в списке немного запутывает вещи.

0 голосов
/ 23 января 2020

Значение 'results' - это список, первым элементом которого является другой словарь. Вы можете получить доступ к вложенному словарю с индексом 0.

print(dict['results'][0]['id'])
0 голосов
/ 23 января 2020

id_value = dict['results'][0]['id']

Кроме того, обычно вы не должны называть свои словари dict в Python. dict - это имя встроенной функции, и вы можете все испортить, переписав ее.

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