Ho un dizionario qui sotto:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Come indicizzo la prima voce del dizionario?
colors[0]
restituirà un KeyError
per ovvi motivi.
Ho un dizionario qui sotto:
colors = {
"blue" : "5",
"red" : "6",
"yellow" : "8",
}
Come indicizzo la prima voce del dizionario?
colors[0]
restituirà un KeyError
per ovvi motivi.
Risposte:
I dizionari non sono ordinati nelle versioni di Python fino a Python 3.6 incluso. Se non ti interessa l'ordine delle voci e desideri comunque accedere alle chiavi o ai valori per indice, puoi utilizzare d.keys()[i]
e d.values()[i]
o d.items()[i]
. (Nota che questi metodi creano un elenco di tutte le chiavi, i valori o gli elementi in Python 2.x. Quindi, se ne hai bisogno più di una volta, salva l'elenco in una variabile per migliorare le prestazioni.)
Se ti interessa l'ordine delle voci, a partire da Python 2.7 puoi usare collections.OrderedDict
. Oppure usa un elenco di coppie
l = [("blue", "5"), ("red", "6"), ("yellow", "8")]
se non è necessario l'accesso tramite chiave. (Perché i tuoi numeri sono stringhe a proposito?)
In Python 3.7, i dizionari normali sono ordinati, quindi non è più necessario utilizzarli OrderedDict
(ma è ancora possibile - è fondamentalmente lo stesso tipo). L'implementazione CPython di Python 3.6 includeva già quella modifica, ma poiché non fa parte della specifica del linguaggio, non puoi fare affidamento su di essa in Python 3.6.
d.iterkeys().next()
invece di d.keys()[0]
per ispezionare una delle chiavi senza rimuoverla. Se il dizionario è enorme, farà una grande differenza in termini di prestazioni. Lo stesso vale per valori e articoli. In Python 2.7 puoi anche usare oggetti vista dict
Se qualcuno sta ancora guardando questa domanda, la risposta attualmente accettata è ora obsoleta:
Dal momento che Python 3.7 * i dizionari preservano l'ordine , cioè ora si comportano esattamente come prima collections.OrderedDict
. Sfortunatamente, non esiste ancora un metodo dedicato per indicizzare nel keys()
/ values()
del dizionario, quindi è possibile ottenere la prima chiave / valore nel dizionario come
first_key = list(colors)[0]
first_val = list(colors.values())[0]
o in alternativa (questo evita di istanziare la vista chiavi in un elenco):
def get_first_key(dictionary):
for key in dictionary:
return key
raise IndexError
first_key = get_first_key(colors)
first_val = colors[first_key]
Se hai bisogno di una n
chiave -esima, allo stesso modo
def get_nth_key(dictionary, n=0):
if n < 0:
n += len(dictionary)
for i, key in enumerate(dictionary.keys()):
if i == n:
return key
raise IndexError("dictionary index out of range")
(* CPython 3.6 includeva già i dict ordinati, ma questo era solo un dettaglio di implementazione. La specifica del linguaggio include i dict ordinati dalla 3.7 in poi.)
Affrontare un elemento del dizionario è come sedersi su un asino e godersi il viaggio.
Come regola di Python DIZIONARIO è senza ordine
Se c'è
dic = {1: "a", 2: "aa", 3: "aaa"}
Ora supponiamo che se vado come dic[10] = "b"
, allora non aggiungerà sempre così
dic = {1:"a",2:"aa",3:"aaa",10:"b"}
Potrebbe essere come
dic = {1: "a", 2: "aa", 3: "aaa", 10: "b"}
O
dic = {1: "a", 2: "aa", 10: "b", 3: "aaa"}
O
dic = {1: "a", 10: "b", 2: "aa", 3: "aaa"}
O qualsiasi combinazione del genere.
Quindi la regola del pollice è DIZIONARIO è senza ordine !
Se hai bisogno di un dizionario ordinato, puoi usare odict .
in realtà ho trovato una nuova soluzione che mi ha davvero aiutato, se sei particolarmente interessato all'indice di un certo valore in una lista o in un set di dati, puoi semplicemente impostare il valore del dizionario su quell'Indice !:
Sta 'a guardare:
list = ['a', 'b', 'c']
dictionary = {}
counter = 0
for i in list:
dictionary[i] = counter
counter += 1
print(dictionary) # dictionary = {'a':0, 'b':1, 'c':2}
Ora, grazie alla potenza degli hashmap, puoi estrarre l'indice delle tue voci in tempo costante (ovvero molto più velocemente)
oh, è difficile. Quello che hai qui, fondamentalmente, sono due valori per ogni elemento. Quindi stai cercando di chiamarli con un numero come chiave. Sfortunatamente, uno dei tuoi valori è già impostato come chiave!
Prova questo:
colors = {1: ["blue", "5"], 2: ["red", "6"], 3: ["yellow", "8"]}
Ora puoi chiamare i tasti per numero come se fossero indicizzati come un elenco. Puoi anche fare riferimento al colore e al numero in base alla loro posizione all'interno dell'elenco.
Per esempio,
colors[1][0]
// returns 'blue'
colors[3][1]
// returns '8'
Naturalmente, dovrai trovare un altro modo per tenere traccia della posizione in cui si trova ciascun colore. Forse puoi avere un altro dizionario che memorizza la chiave di ogni colore come valore.
colors_key = {'blue': 1, 'red': 6, 'yllow': 8}
Quindi, sarai in grado di cercare anche la chiave dei colori, se necessario.
colors [colors_key ['blue']] [0] restituirà 'blue'
Qualcosa del genere.
E poi, già che ci sei, puoi creare un dict con i valori numerici come chiavi in modo da poterli sempre usare per cercare i tuoi colori, sai, se ne hai bisogno.
valori = {5: [1, 'blue'], 6: [2, 'red'], 8: [3, 'yellow']}
Quindi, (colors [colors_key [values [5] [1]]] [0]) restituirà 'blue'.
Oppure potresti usare un elenco di elenchi.
In bocca al lupo!
Non puoi, poiché dict
non è ordinato. puoi usare .popitem()
per ottenere un elemento arbitrario, ma questo lo rimuoverà dal dict.