example python

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 [] .