Подтвердить что ты не робот

Чтение из Python dict, если ключ не может присутствовать

Я очень новичок в Python и анализирую данные.

Я могу вытащить внешний JSON-канал в словарь Python и перебрать словарь.

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

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

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

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

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

Brock

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

  • Питоновский способ доступа к паре "ключ-значение":

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'

Ответ 4

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

Ответ 5

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

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

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

Это использует выражение генератора для выбора "строк" ​​из "результатов", где "строка" включает в себя ключ "а".

Здесь немного теста script:

results = [{'a':True}, {'b':True}, {'a':True}]
for r in (row for row in results if 'a' in row): print r['a']

Ответ 6

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

key='key_name'
# or loop your keys 

if hasattr(e, key):
  print(e[key])
else:
  print('No key for %s' % key)

Ответ 7

Первоначальный вопрос в этой теме: почему я написал библиотеку Dictor, она обрабатывает JSON-резервные значения и значения None изящно, не используя блоки try/исключением или If.

Также предоставляет дополнительные параметры, такие как игнорирование верхнего/нижнего регистра,

видеть,

https://github.com/perfecto25/dictor