example - getattr python 3
Python getattr equivalente para diccionarios? (2)
También eche un vistazo a la clase defaultdict del módulo de colecciones. Es un dict para el que puede especificar lo que debe devolver cuando no se encuentra la clave. Con él puedes hacer cosas como:
class MyDefaultObj:
def __init__(self):
self.a = 1
from collections import defaultdict
d = defaultdict(MyDefaultObj)
i = d[''NonExistentKey'']
type(i)
<instance of class MyDefalutObj>
lo que le permite usar la conocida convención d [i].
Sin embargo, como dijo mikej, .get () también funciona, pero aquí está la forma más cercana a tu ejemplo de JavaScript:
d = {}
i = d.get(''NonExistentKey'') or MyDefaultObj()
# the reason this is slightly better than d.get(''NonExistent'', MyDefaultObj())
# is that instantiation of default value happens only when ''NonExistent'' does not exist.
# With d.get(''NonExistent'', MyDefaultObj()) you spin up a default every time you .get()
type(i)
<instance of class MyDefalutObj>
¿Cuál es la manera más concisa de decir, en Python, "Dame dict[''foo''] si existe, y si no, dame esta otra bar valor"? Si estuviera usando un objeto en lugar de un diccionario, usaría getattr :
getattr(obj, ''foo'', bar)
pero esto genera un error clave si trato de usar un diccionario (una distinción que me parece desafortunada proveniente de JavaScript / CoffeeScript). Del mismo modo, en JavaScript / CoffeeScript solo escribiría
dict[''foo''] || bar
pero, nuevamente, esto produce un KeyError. ¿Qué hacer? Algo sucinto , por favor!
dict.get(key, default) devuelve dict[key] si la clave está en dict, de lo contrario devuelve el valor predeterminado.
Tenga en cuenta que el valor predeterminado para el valor default es None por lo que si dice dict.get(key) y la clave no está en dict, esto simplemente devolverá None lugar de generar un KeyError como ocurre cuando usa la notación de acceso a la tecla [] .