Lectura del dictado de Python si la clave podría no estar presente

Soy muy nuevo en Python y analizando datos.

Puedo colocar una fuente JSON externa en un diccionario de Python e iterar sobre el diccionario.

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

A medida que avanzo los resultados obtenidos, aparece un error cuando una clave no tiene un valor (es posible que un valor no siempre exista para un registro). Si imprimo los resultados, se muestra como

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

Mi código se rompe en el error. ¿Cómo puedo controlar que una clave no tenga un valor?

¡Cualquier ayuda será apreciada!

Brock

La forma preferida, cuando sea aplicable:

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

esto simplemente imprimirá None si key_name no es una clave en el diccionario. También puede tener un valor predeterminado diferente, solo páselo como segundo argumento:

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

Si desea hacer algo diferente a usar un valor predeterminado (por ejemplo, omita la impresión por completo cuando la clave está ausente), entonces necesita un poco más de estructura, es decir:

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

o

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

el segundo puede ser más rápido (si es razonablemente raro que falte una tecla), pero el primero parece ser más natural para muchas personas.

Si es posible, use la biblioteca simplejson para administrar datos JSON.

Hay dos formas sencillas de leer el dictado de Python si la clave no está presente. por ejemplo:

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

  1. La forma en que los pitones acceden a un par clave-valor es:

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

  1. La forma no pythonica:

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

  1. peor aún:

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

usa has_key (), y eso devolverá verdadero o falso

[Actualizado para eliminar error descuidado]

También podrías hacer algo como esto:

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

Esto utiliza una expresión generadora para seleccionar “filas” de “resultados” donde “fila” incluye la clave “a”.

Aquí hay un pequeño script de prueba:

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

Puede utilizar la función incorporada hasattr

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