Cómo obtener claves de diccionario como una lista en Python

  1. dict.keys() para obtener claves de diccionario en Python
  2. Bucles para obtener claves de diccionario en Python
  3. Lista de comprensiones para obtener claves de diccionario en Python
  4. El diccionario de Python desempaqueta el operador * para obtener las claves
  5. Comparación del rendimiento en tiempo de ejecución

Obtener una vista de las teclas del diccionario como una secuencia es un caso de uso cotidiano en la programación en Python.

Existen varios enfoques para lograrlo, cada uno con diferentes características de rendimiento.

dict.keys() para obtener claves de diccionario en Python

La función dict.keys() devuelve dict_keys - una vista iterable de las claves del diccionario.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> state_capitals.keys()
dict_keys(['California', 'Pennsylvania', 'Texas'])

Puedes iterar sobre dict_keys directamente sin convertirlo en una lista. Para muchos casos de uso, dict_keys puede ser eliminado en lugar de una lista en las APIs, y funcionará.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> for state in state_capitals.keys():
...   print(state)
...
California
Pennsylvania
Texas

Si necesita trabajar con las llaves de diccionario estrictamente como en las listas, por ejemplo, si quiere para poder utilizar un índice para leer una clave determinada de la secuencia, debería convertir dict_keys en una lista primero.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals.keys())
['California', 'Pennsylvania', 'Texas']

Tenga en cuenta que llamar dict.keys() es opcional si quiere obtener las claves como una lista. Dado que los diccionarios de Python son iterables sobre sus claves, puede pasar un diccionario en un constructor de listas.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> list(state_capitals)
['California', 'Pennsylvania', 'Texas']

Bucles para obtener claves de diccionario en Python

Una propiedad peculiar de los diccionarios en Python es que cuando se itera sobre ellos, iteras de sus llaves. De esta manera puedes recoger todas las claves del diccionario simplemente iterando sobre él.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = []
>>> for key im state_capitals:
...   keys.append(key)
...
>>> keys
['California', 'Pennsylvania', 'Texas']

Lista de comprensiones para obtener claves de diccionario en Python

Una mejora sintáctica con respecto al uso de bucles puede ser el uso de la [lista de comprensión] de Python (https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions). Con las comprensiones de lista, puede condensar el bucle anterior en una sola línea.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [key for key in state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

El diccionario de Python desempaqueta el operador * para obtener las claves

A partir de Python 3.5, podemos usar el operador unpacking * para obtener las claves del diccionario. Esta característica se introdujo con PEP 448 - Generalizaciones adicionales de desempaquetado.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys = [*state_capitals]
>>> keys
['California', 'Pennsylvania', 'Texas']

La ventaja de este enfoque es que puede desempaquetar sus claves de diccionario en otras colecciones más allá de las listas, como tuplas o conjuntos.

>>> state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}
>>> keys_tuple = *state_capitals,
>>> keys_tuple
('California', 'Pennsylvania', 'Texas')
>>> keys_set = {*state_capitals}
>>> keys_set
{'California', 'Pennsylvania', 'Texas'}

Comparación del rendimiento en tiempo de ejecución

El rendimiento en tiempo de ejecución de cada uno de los enfoques anteriores varía.

>>> from timeit import timeit
>>> timeit("list(state_capitals.keys())", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25394885599962436
>>> timeit("list(state_capitals)", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.17995373999929143
>>> timeit("for key in state_capitals: keys.append(key)", setup="keys = []; state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.25294865500018204
>>> timeit("[key for key in state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.2447525150000729
>>> timeit("[*state_capitals]", setup="state_capitals = {'California': 'Sacramento', 'Pennsylvania': 'Harrisburg', 'Texas': 'Austin'}")
0.0962776809992647

Como se desprende de los tiempos anteriores, el operador de desembalaje * es el más rápido.

Prefiera este método, a menos que tenga una buena razón para volver a cualquiera de los otros métodos.

Artículo relacionado - Python dictionary

  • Cómo comprobar si existe una clave en un diccionario en Python
  • Cómo ordenar un diccionario Python por valor
  • Cómo fusionar dos diccionarios en Python 2 y 3
  • Cómo eliminar un elemento de un diccionario Python
  • comments powered by Disqus