Чтение из Python dict, если ключ может отсутствовать - PullRequest
26 голосов
/ 15 февраля 2010

Я очень новичок в Python и разборе данных.

Я могу вытянуть внешнюю ленту JSON в словарь Python и выполнить итерацию по словарю.

for r in results:
     print r['key_name']

При просмотре возвращенных результатов я получаю сообщение об ошибке, когда ключ не имеет значения (значение может не всегда существовать для записи). Если я распечатываю результаты, это показывает как

'key_name': None, 'next_key':.................

Мой код не работает по ошибке. Как я могу контролировать ключ, не имеющий значения?

Любая помощь будет принята с благодарностью!

Брок

Ответы [ 6 ]

74 голосов
/ 15 февраля 2010

Предпочтительный способ, когда применимо:

for r in results:
     print r.get('key_name')

это просто напечатает None, если key_name не является ключом в словаре. Вы также можете иметь другое значение по умолчанию, просто передайте его в качестве второго аргумента:

for r in results:
     print r.get('key_name', 'Missing: key_name')

Если вы хотите сделать что-то иное, чем использование значения по умолчанию (скажем, пропустить печать полностью, когда ключ отсутствует), вам потребуется немного больше структуры, то есть:

for r in results:
    if 'key_name' in r:
        print r['key_name']

или

for r in results:
    try: print r['key_name']
    except KeyError: pass

второй может быть быстрее (если он достаточно редок, чем отсутствует ключ), но первый кажется более естественным для многих людей.

1 голос
/ 14 января 2017

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

dicty = {'A': 'hello', 'B': 'world'}

  1. Питонный способ доступа к паре ключ-значение:

value = dicty.get('C', 'default value')

  1. Непитонный путь:

value = dicty['C'] if dicty['C'] else 'default value'

  1. еще хуже:

try: value = dicty['C'] except KeyError as ke: value = 'default value'

1 голос
/ 15 февраля 2010

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

0 голосов
/ 14 апреля 2017

Вы можете использовать встроенную функцию hasattr

key='key_name'
# or loop your keys 

if hasattr(e, key):
  print(e[key])
else:
  print('No key for %s' % key)
0 голосов
/ 15 февраля 2010

[Обновлено, чтобы убрать небрежную ошибку] ​​

Вы также можете сделать что-то вроде этого:

for r in (row for row in results if 'a' in row):
    print r['a']

Используется выражение генератора, чтобы выбрать «строки» из «результатов», где «строка» включает ключ «a».

Вот небольшой тестовый скрипт:

results = [{'a':True}, {'b':True}, {'a':True}]
for r in (row for row in results if 'a' in row): print r['a']
0 голосов
/ 15 февраля 2010

используйте has_key (), и это вернет true или false

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