HOWTO · Python
Come ottenere la prima chiave in un dizionario Python
Impara a ottenere la prima chiave prodotta da un iteratore di dizionario Python con next(), la conversione in lista, un ciclo for e un valore predefinito sicuro per i dizionari vuoti.
In questa pagina
Per ottenere la prima chiave prodotta da un dizionario Python, chiama next(iter(my_dict)). Questo legge una chiave direttamente dall’iteratore del dizionario. In questo esempio, il dizionario contiene un nome e una città, e il programma stampa la prima chiave prodotta:
my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)
Cosa significa «prima» in un dizionario
Un dizionario non fornisce un’indicizzazione numerica per le chiavi. Qui, «prima» significa la prima chiave prodotta quando Python itera sul dizionario. Per un dizionario ordinato, l’iterazione segue l’ordine di inserimento, quindi la prima chiave è quella inserita per prima. Se una mappatura utilizza un ordine di iterazione diverso, «prima» segue il comportamento di iterazione di quella mappatura. Questa definizione descrive il risultato dell’iterazione; non presuppone che ogni mappatura ordini le sue chiavi allo stesso modo.
L’iterazione su un dizionario produce le chiavi per impostazione predefinita. Puoi quindi passare il dizionario direttamente a iter() o a un ciclo for. Non è necessario chiamare prima keys(). Il metodo my_dict.keys() restituisce una vista dinamica delle chiavi quando devi ispezionare o riutilizzare quella vista separatamente.
Ottenere la prima chiave con next()
Usa iter() per creare un iteratore sul dizionario, quindi next() per recuperare il suo elemento successivo. Poiché un iteratore di dizionario produce chiavi, questo approccio legge una chiave senza costruire un elenco separato di tutte le chiavi. Per un dizionario non vuoto, è la scelta concisa quando ti serve una sola chiave:
my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)
Il valore di first_key è la prima chiave prodotta dall’iterazione. next() accetta anche un valore predefinito facoltativo, utile quando il dizionario potrebbe non avere chiavi. L’ultima sezione mostra questa forma.
Ottenere la prima chiave con list()
Se ti servono anche le chiavi come elenco, converti il dizionario in un elenco e seleziona l’indice 0. Un dizionario passato a list() produce le sue chiavi, quindi non è necessario chiamare prima keys():
my_dict = {"name": "Ada", "city": "London"}
first_key = list(my_dict)[0]
print(first_key)
Questa conversione materializza ogni chiave prima di selezionarne una. Usa l’approccio con l’iteratore quando ti serve una sola chiave. La conversione in elenco è utile quando l’elenco risultante verrà anche indicizzato, affettato o usato in un’altra operazione sugli elenchi. L’indice 0 richiede che l’elenco contenga una chiave, quindi questa forma non è adatta quando il dizionario potrebbe essere vuoto, a meno che tu non lo verifichi prima.
Ottenere la prima chiave con un ciclo for
Un ciclo for itera direttamente sulle chiavi del dizionario. Assegna la prima chiave, quindi usa break per fermarti dopo quell’iterazione:
my_dict = {"name": "Ada", "city": "London"}
for key in my_dict:
first_key = key
break
print(first_key)
Questo approccio si adatta al codice che usa già un ciclo o che deve eseguire un’operazione con la chiave prima di fermarsi. Evita di convertire tutte le chiavi in un elenco. Il ciclo non ha bisogno di items() quando il valore non viene usato. Se il dizionario non contiene chiavi, il corpo del ciclo non viene mai eseguito, quindi il codice che usa first_key in seguito dovrebbe tenere conto di questa possibilità.
Gestire un dizionario vuoto
Chiamare next(iter(my_dict)) quando il dizionario non ha chiavi solleva StopIteration. Passa un secondo argomento a next() per restituire invece un valore di ripiego:
my_dict = {}
first_key = next(iter(my_dict), None)
print(first_key)
Qui, None è il valore di ripiego. Scegli un valore predefinito che non possa essere confuso con una chiave di dizionario valida. Se None può essere una chiave nei tuoi dati, crea un oggetto sentinella univoco e usalo come valore predefinito:
my_dict = {"name": "Ada", "city": "London"}
sentinel = object()
first_key = next(iter(my_dict), sentinel)
if first_key is sentinel:
print("No keys")
else:
print(first_key)
L’approccio con l’elenco tramite list(my_dict)[0] non ha un argomento predefinito e solleva IndexError quando non ci sono chiavi. Usa next(iter(my_dict), default) quando un valore di ripiego in linea rende più semplice gestire il comportamento con input vuoto.