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

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

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

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

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

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

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

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

Brock

6 ответов

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

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

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


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


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


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

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

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']


Есть два простых способа чтения из 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'


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

key='key_name'
# or loop your keys 
if hasattr(e, key):
 print(e[key])
else:
 print('No key for %s' % key)

licensed under cc by-sa 3.0 with attribution.