Come posso ottenere la chiave del dizionario come variabile direttamente in Python (non cercando dal valore)?


189

Ci scusiamo per questa domanda di base, ma le mie ricerche su questo non stanno rivelando nient'altro che come ottenere la chiave di un dizionario in base al suo valore che preferirei non usare poiché voglio semplicemente il testo / nome della chiave e sono preoccupato che la ricerca per valore potrebbe finire per restituire 2 o più chiavi se il dizionario ha molte voci ... quello che sto cercando di fare è questo:

mydictionary={'keyname':'somevalue'}
for current in mydictionary:

   result = mydictionary.(some_function_to_get_key_name)[current]
   print result
   "keyname"

Il motivo è che li sto stampando su un documento e voglio usare il nome della chiave e il valore per farlo

Ho visto il metodo seguente ma questo sembra restituire semplicemente il valore della chiave

get(key[, default])

Vuoi solo verificare che "keyname" esista nel dizionario? Perché ce l' hai già.
Rilasciato il

1
no, come ho detto, è necessario stamparlo, sarebbe iterando attraverso un gran numero di chiavi
Rick

currentè la chiave attuale, bastaprint current
Moberg

4
Come otterresti solo la prima chiave nel dizionario? (nessuna iterazione)
VISQL

Risposte:


238

Dovresti scorrere le chiavi con:

for key in mydictionary:
   print "key: %s , value: %s" % (key, mydictionary[key])

10
Puoi semplicemente scriverefor key in mydictionary:
blokeley il

7
in Python 3.6:print (f"key: {key}, value: {mydictionary[key]}")
JinSnow

94

Se si desidera stampare chiave e valore, utilizzare quanto segue:

for key, value in my_dict.iteritems():
    print key, value

26
Per Python 3: items () invece di iteritems ()
toshiro92,

82

Il motivo è che li sto stampando su un documento e voglio usare il nome della chiave e il valore per farlo

Sulla base dei requisiti di cui sopra, questo è ciò che suggerirei:

keys = mydictionary.keys()
keys.sort()

for each in keys:
    print "%s: %s" % (each, mydictionary.get(each))

Preferisco le altre risposte come il ciclo for on my_dict.item()o la comprensione della lista come, keys = list(my_dict.keys)ma nel caso qualcuno volesse farlo in Python 3: (riga 2) keys = sorted(my_dict.keys())+ add () per stampare.
Honiix,

50

Se il dizionario contiene una coppia in questo modo:

d = {'age':24}

allora puoi ottenere come

field, value = d.items()[0]

Per Python 3.5, procedere come segue:

key = list(d.keys())[0]

4
Python3.5:TypeError: 'dict_items' object does not support indexing
Sinux

Abbastanza hackish ma d .__ iter __ () .__ next __ () fa il trucco. ottieni "età". Ottieni lo stesso risultato con questo d.items () .__ iter __ () .__ successivo __ () [0].
yoshi,

2
In Python3, funziona per una coppia di dadi:key = list(d.keys())[0]
Juha Untinen,

Se si dispone di un enorme dict, utilizzando next()è meglio in base a: stackoverflow.com/a/27638751/1488445
Juha Untinen

14

keys=[i for i in mydictionary.keys()] o keys = list(mydictionary.keys())


Assicurati di utilizzare i tag di codice e di spiegare anche la tua risposta.
Chrismas007,

9

Così semplice:

mydictionary={'keyname':'somevalue'}
result = mydictionary.popitem()[0]

Modificherai il tuo dizionario e dovresti prima crearne una copia


8

Si potrebbe semplicemente usare ciò *che decomprime le chiavi del dizionario. Esempio:

d = {'x': 1, 'y': 2}
t = (*d,)
print(t) # ('x', 'y')

python34: SyntaxError: può usare l'espressione stellata solo come destinazione del compito
Tcll

pericolo, io uso python34 perché non riesco a eseguire nulla di più recente nel mio ambiente di test di Windows.
Fino al

5

Scorrere sul dizionario (i) restituirà la chiave, quindi usarla (i) per ottenere il valore

for i in D:
    print "key: %s, value: %s" % (i, D[i])

3

Per python 3 Se vuoi ottenere solo i tasti usa questo. Sostituisci print (chiave) con print (valori) se vuoi i valori.

for key,value in my_dict:
  print(key)

3

Quello che a volte faccio è creare un altro dizionario solo per essere in grado di accedervi come stringa. Quindi eseguo l'iterazione su più dizionari abbinando le chiavi per creare ad esempio una tabella con la prima colonna come descrizione.

dict_names = {'key1': 'Text 1', 'key2': 'Text 2'}
dict_values = {'key1': 0, 'key2': 1} 

for key, value in dict_names.items():
    print('{0} {1}'.format(dict_names[key], dict_values[key])

Puoi facilmente fare in modo che una grande quantità di dizionari corrisponda ai dati (mi piace il fatto che con il dizionario puoi sempre fare riferimento a qualcosa di ben noto come il nome della chiave)

Sì, utilizzo i dizionari per memorizzare i risultati delle funzioni, quindi non ho bisogno di eseguire queste funzioni ogni volta che le chiamo solo una volta e quindi accedo ai risultati in qualsiasi momento.

EDIT: nel mio esempio il nome della chiave non ha molta importanza (personalmente mi piace usare gli stessi nomi di chiave in quanto è più facile scegliere un singolo valore da uno dei miei dizionari corrispondenti), assicurati solo che il numero di chiavi in ​​ciascun dizionario sia lo stesso


0

Puoi farlo lanciando le chiavi e i valori dict nell'elenco. Può anche essere fatto per gli articoli.

Esempio:

f = {'one': 'police', 'two': 'oranges', 'three': 'car'}
list(f.keys())[0] = 'one'
list(f.keys())[1] = 'two'

list(f.values())[0] = 'police'
list(f.values())[1] = 'oranges'

-2

cambiare facilmente la posizione delle chiavi e dei valori, quindi utilizzare i valori per ottenere la chiave, nel dizionario le chiavi possono avere lo stesso valore ma (chiavi) dovrebbero essere diverse. ad esempio se hai un elenco e il primo valore di esso è una chiave per il tuo problema e altri valori sono le specifiche del primo valore:

list1=["Name",'ID=13736','Phone:1313','Dep:pyhton']

puoi salvare e usare facilmente i dati nel Dizionario tramite questo loop:

data_dict={}
for i in range(1, len(list1)):
     data_dict[list1[i]]=list1[0]
print(data_dict)
{'ID=13736': 'Name', 'Phone:1313': 'Name', 'Dep:pyhton': 'Name'}

quindi puoi trovare la chiave (nome) di base su qualsiasi valore di input.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.