supongamos que tengo un diccionario cuyas claves son cadenas. ¿Cómo puedo crear eficientemente un nuevo diccionario a partir de lo que contiene solo las claves presentes en alguna lista?Selección de elementos de diccionario por clave de manera eficiente en Python
por ejemplo:
# a dictionary mapping strings to stuff
mydict = {'quux': ...,
'bar': ...,
'foo': ...}
# list of keys to be selected from mydict
keys_to_select = ['foo', 'bar', ...]
La forma en que se me ocurrió es:
filtered_mydict = [mydict[k] for k in mydict.keys() \
if k in keys_to_select]
pero creo que esto es muy ineficiente debido a que: (1) que requiere la enumeración de las teclas con teclas() , (2) requiere buscar k en keys_to_select cada vez. al menos uno de estos se puede evitar, creo. ¿algunas ideas? También puedo usar scipy/numpy si es necesario.
Cuando se utiliza "si k en mydict" como este, no Python realizar un tipo de búsqueda has_key, o lo hace convertir las llaves en una lista/iterable y lazo sobre ellos? Si es el último, "if mydict.has_key (k)" podría ser más eficiente, ¿no? (No he encontrado ninguna documentación para aclarar, de cualquier manera, aún. Las habilidades de Google me fallaron). – pycruft
Para responder a mi propia pregunta, usar "k en dict" es idéntico al uso de "dict.has_key (k)" de acuerdo con http://www.python.org/dev/peps/pep-0234/ – pycruft
@pycruft, sip y, como 'timeit' cqn confirm (' python -mtimeit -s'd = dict.fromkeys (range (99)) ''23 en d''etc.),' in' es, de hecho, aproximadamente el doble de rápido como 'has_key' (guarda una búsqueda de atributo con nombre cada vez, que es aproximadamente la misma operación que un dict loolup). Nunca hay ninguna razón para usar 'has_key' más, y se ha eliminado de Python 3. –