elementos - ejemplos de diccionarios en python
No devuelve ninguno si la clave del diccionario no está disponible (11)
Como otros han dicho anteriormente, puedes usar get ().
Pero para buscar una clave, también puedes hacer:
d = {}
if ''keyname'' in d:
# d[''keyname''] exists
pass
else:
# d[''keyname''] does not exist
pass
Necesito una forma de obtener un valor de diccionario si su clave existe, o simplemente devolver None
, si no es así.
Sin embargo, Python genera una excepción KeyError
si busca una clave que no existe. Sé que puedo verificar la clave, pero estoy buscando algo más explícito. ¿Hay una manera de simplemente devolver None
si la clave no existe?
Debes usar el método get()
de la clase dict
d = {}
r = d.get( ''missing_key'', None )
Esto resultará en r == None
. Si la clave no se encuentra en el diccionario, la función obtener devuelve el segundo argumento.
Extrañar más. Está integrado en el lenguaje.
>>> help(dict) Help on class dict in module builtins: class dict(object) | dict() -> new empty dictionary | dict(mapping) -> new dictionary initialized from a mapping object''s | (key, value) pairs ... | | get(...) | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. | ...
Podría usar el método get()
un objeto dict
, como ya han sugerido otros. Alternativamente, dependiendo de lo que esté haciendo exactamente, puede usar una suite de try/except
como esta:
try:
<to do something with d[key]>
except KeyError:
<deal with it not being there>
Lo que se considera un enfoque muy "pitónico" para manejar el caso.
Puede anular __missing__(self, key)
al hacer una subclase de dict y devolver Ninguno.
class MyDict(dict):
def __missing__(self, key):
return None
Puedes usar get()
value = d.get(key)
el cual devolverá None
si la key is not in d
. También puede proporcionar un valor predeterminado diferente que se devolverá en lugar de None
:
value = d.get(key, "empty")
Si desea una solución más transparente, puede dict
subclase de dict
para obtener este comportamiento:
class NoneDict(dict):
def __getitem__(self, key):
return dict.get(self, key)
>>> foo = NoneDict([(1,"asdf"), (2,"qwerty")])
>>> foo[1]
''asdf''
>>> foo[2]
''qwerty''
>>> foo[3] is None
True
Una solución de una línea sería:
item[''key''] if ''key'' in item else None
Esto es útil cuando intenta agregar valores de diccionario a una nueva lista y desea proporcionar un valor predeterminado:
p.ej.
row = [item[''key''] if ''key'' in item else ''default_value'']
Usualmente uso un defaultdict para situaciones como esta. Usted suministra un método de fábrica que no toma argumentos y crea un valor cuando ve una nueva clave. Es más útil cuando desea devolver algo así como una lista vacía en nuevas claves ( vea los ejemplos ).
from collections import defaultdict
d = defaultdict(lambda: None)
print d[''new_key''] # prints ''None''
Utilizar get()