Чтение из Python dict, если ключ не может присутствовать
Я очень новичок в Python и анализирую данные.
Я могу вытащить внешний JSON-канал в словарь Python и перебрать словарь.
for r in results:
print r['key_name']
Когда я просматриваю возвращаемые результаты, я получаю сообщение об ошибке, когда ключ не имеет значения (значение может не всегда существовать для записи). Если я напечатаю результаты, он будет отображаться как
'key_name': None, 'next_key':.................
Мой код разбивается на ошибку. Как я могу управлять ключом, не имеющим значения?
Любая помощь будет принята с благодарностью!
Brock
Ответы
Ответ 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')
- Непитонический способ:
value = dicty['C'] if dicty['C'] else 'default value'
- еще хуже:
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