¿Existe una forma integrada / rápida de usar una lista de claves de un diccionario para obtener una lista de los elementos correspondientes?
Por ejemplo tengo:
>>> mydict = {'one': 1, 'two': 2, 'three': 3}
>>> mykeys = ['three', 'one']
¿Cómo puedo usar mykeys
para obtener los valores correspondientes en el diccionario como una lista?
>>> mydict.WHAT_GOES_HERE(mykeys)
[3, 1]
python
list
dictionary
key
FazJaxton
fuente
fuente
mydict
es una llamada de función (que devuelve un dict), entonces llama a la función varias veces, ¿verdad?Un par de otras formas además de list-comp:
map(mydict.__getitem__, mykeys)
None
si no se encuentra la clave:map(mydict.get, mykeys)
Alternativamente, el uso
operator.itemgetter
puede devolver una tupla:Nota : en Python3,
map
devuelve un iterador en lugar de una lista. Úselolist(map(...))
para una lista.fuente
Una pequeña comparación de velocidad:
Entonces, la comprensión de la lista y la selección de elementos son las formas más rápidas de hacer esto.
ACTUALIZACIÓN: Para grandes listas aleatorias y mapas tuve resultados un poco diferentes:
Así que en este caso el ganador es clara
f = operator.itemgetter(*l); f(m)
, y forastero claro:map(lambda _: m[_], l)
.ACTUALIZACIÓN para Python 3.6.4:
Entonces, los resultados para Python 3.6.4 son casi los mismos.
fuente
Aquí hay tres formas.
Aumento
KeyError
cuando no se encuentra la clave:Valores predeterminados para claves faltantes.
Saltarse las llaves faltantes.
fuente
found_keys = mapping.keys() & iterable
daTypeError: unsupported operand type(s) for &: 'list' and 'list'
en python 2.7; `found_keys = [clave para clave en mapping.keys () si la clave es iterable] funciona mejorPrueba esto:
fuente
Prueba esto:
fuente
items()
es preferible, no tiene que hacer una búsqueda adicional, ¡no haylen(mydict)*len(mykeys)
operación aquí! (note que estoy usando un set)mykeys
se amortiza a tiempo constante, estoy usando un conjunto, no una listafuente
Pandas hace esto con mucha elegancia, aunque las comprensiones de la lista siempre serán más técnicamente pitónicas. No tengo tiempo para poner una comparación de velocidad en este momento (volveré más tarde y la pondré):
fuente
O simplemente
mydict.keys()
eso es un método integrado para la creación de diccionarios. También explorarmydict.values()
ymydict.items()
.// Ah, la publicación de OP me confundió.
fuente
Después del cierre de Python: forma eficiente de crear una lista a partir de valores dict con un orden dado
Recuperando las claves sin construir la lista:
La salida:
Que coincide con el orden dado por la lista
fuente
en caso de que no haya llaves en el dict.
fuente