resueltos elementos ejercicios ejemplos diccionarios diccionario dentro agregar python

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


Si puedes hacerlo con False , también está la hasattr incorporada hasattr :

e=dict() hasattr(e, ''message''): >>> False


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