Come ottenere le chiavi di dizionario come lista in Python

Aliaksei Yursha 30 gennaio 2023
  1. dict.keys() per ottenere le chiavi del dizionario Python
  2. Loop per ottenere le chiavi del dizionario Python
  3. Elencare le comprensioni per ottenere le chiavi del dizionario Python
  4. Dizionario Python scompattando l’operatore * per ottenere le chiavi
  5. Confronto delle prestazioni di runtime
Come ottenere le chiavi di dizionario come lista in Python

Ottenere una visione dei tasti del dizionario come sequenza è un caso di uso quotidiano nella programmazione Python.

Ci sono diversi approcci per ottenerla, ognuno con diverse caratteristiche di performance.

dict.keys() per ottenere le chiavi del dizionario Python

La funzione dict.keys()
restituisce dict_keys - una vista iterativa delle chiavi del dizionario.

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

Si può iterare su dict_keys direttamente senza convertirlo in una lista.
Per molti casi d’uso, dict_keys può essere eliminato al posto di una lista nelle API, e funzionerà.

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

Se hai bisogno di lavorare sulle chiavi del dizionario rigorosamente come sugli liste, per esempio, se vuoi essere in grado di usare un indice per leggere una particolare chiave dalla sequenza, dovresti prima convertire dict_keys in una lista.

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

Si noti che chiamare dict.keys() è opzionale se si vogliono ottenere le chiavi come lista.
Poiché i dizionari Python sono iterabili sopra le loro chiavi, si può passare un file
dizionario stesso in un costruttore di liste.

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

Loop per ottenere le chiavi del dizionario Python

Una proprietà peculiare dei dizionari in Python è che quando si itera su di essi,
iterate delle loro chiavi.
Così è possibile raccogliere tutte le chiavi di dizionario semplice iterazione su di esso.

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

Elencare le comprensioni per ottenere le chiavi del dizionario Python

Un miglioramento sintattico rispetto all’uso dei loop può essere l’utilizzo di Python list comprehensions.
Con le comprensioni di lista, è possibile condensare il bucle di cui sopra in una sola riga.

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

Dizionario Python scompattando l’operatore * per ottenere le chiavi

A partire da Python 3.5, possiamo usare l’operatore unpacking * per ottenere una presa sui tasti del dizionario.
Questa funzione è stata introdotta con PEP 448 - Additional Unpacking Generalizations.

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

Il lato positivo di questo approccio è che è possibile decomprimere le chiavi di di dizionario in altre collezioni oltre alle liste, come tuple o set.

>>> 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'}

Confronto delle prestazioni di runtime

Le prestazioni di runtime di ciascuno dei suddetti approcci variano.

>>> 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

Come segue dai tempi di cui sopra, l’operatore di disimballaggio * è il più veloce.

Lo si preferisce, a meno che non si abbia una buona ragione per ripiegare su uno qualsiasi degli altri approcci.

Articolo correlato - Python Dictionary