Tengo un gran objeto de diccionario que tiene varios pares de valores clave (alrededor de 16), pero solo estoy interesado en 3 de ellos. ¿Cuál es la mejor manera (más corta / eficiente / más elegante) para lograr eso?
Lo mejor que sé es:
bigdict = {'a':1,'b':2,....,'z':26}
subdict = {'l':bigdict['l'], 'm':bigdict['m'], 'n':bigdict['n']}
Estoy seguro de que hay una forma más elegante que esta. Ideas?
fuente
bigdict
no contienek
{k: bigdict.get(k,None) for k in ('l', 'm', 'n')}
se ocupará de la situación en la que falta una clave específica en el diccionario fuente configurando la clave en el nuevo dict a Ningunobigdict.keys() & {'l', 'm', 'n'}
==>bigdict.viewkeys() & {'l', 'm', 'n'}
para Python2.7Un poco más corto, al menos:
fuente
dict((k,bigdict.get(k,defaultVal) for k in wanted_keys)
si debe tener todas las claves.fuente
Un poco de comparación de velocidad para todos los métodos mencionados:
Como era de esperar: la mejor opción es la comprensión del diccionario.
fuente
key
no existebigdict
.Esta respuesta utiliza una comprensión del diccionario similar a la respuesta seleccionada, pero no lo hará excepto en un elemento que falta.
versión de python 2:
versión de python 3:
fuente
Tal vez:
Python 3 incluso admite lo siguiente:
Tenga en cuenta que puede verificar la existencia en el diccionario de la siguiente manera:
resp. para python 3
fuente
a
no está enbigdict
Bien, esto es algo que me ha molestado varias veces, así que gracias Jayesh por preguntarlo.
Las respuestas anteriores parecen ser una solución tan buena como cualquier otra, pero si está usando esto en todo su código, tiene sentido envolver la funcionalidad en mi humilde opinión. Además, aquí hay dos casos de uso posibles: uno en el que le importa si todas las palabras clave están en el diccionario original. y uno donde no lo hagas. Sería bueno tratar a ambos por igual.
Entonces, para mi valor de dos peniques, sugiero escribir una subclase de diccionario, por ejemplo
Ahora puede sacar un sub-diccionario con
Ejemplos de uso:
Si ejecuta todo el código anterior, debería ver (algo así) el siguiente resultado (perdón por el formato):
fuente
subdict(orig_dict, keys, …)
?También puede usar
map
(que es una función muy útil para conocer de todos modos):sd = dict(map(lambda k: (k, l.get(k, None)), l))
Ejemplo:
PD: tomé prestado el
.get(key, None)
de una respuesta anterior :)fuente
Otra más (prefiero la respuesta de Mark Longair)
fuente
solución
ejemplos de uso
fuente