[python] Controlla se una determinata chiave esiste già in un dizionario



8 Answers

Non devi chiamare le chiavi:

if 'key1' in dict:
  print "blah"
else:
  print "boo"

Questo sarà molto faster in quanto utilizza l'hashing del dizionario invece di fare una ricerca lineare, che farebbe le chiavi di chiamata.

Question

Volevo testare se esiste una chiave in un dizionario prima di aggiornare il valore della chiave. Ho scritto il seguente codice:

if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"

Penso che questo non sia il modo migliore per portare a termine questo compito. C'è un modo migliore per testare una chiave nel dizionario?




print dict.get('key1', 'blah')

Non stamperà boo per i valori nel dict, ma raggiunge l'obiettivo stampando il valore di key1 per confermare invece la sua esistenza.




Per il controllo è possibile utilizzare il metodo has_key()

if dict.has_key('key1'):
   print "it is there"

Se si desidera un valore, è possibile utilizzare il metodo get()

a = dict.get('key1', expeced_type)

Se si desidera una tupla o un elenco o un dizionario o qualsiasi stringa come valore predefinito come valore di ritorno, utilizzare il metodo get()

a = dict.get('key1', {}).get('key2', [])



Puoi abbreviare questo:

if 'key1' in dict:
    ...

Tuttavia, questo è nel migliore dei casi un miglioramento estetico. Perché credi che questo non sia il modo migliore?




Per ulteriori informazioni sull'esecuzione rapida dei metodi proposti dalla risposta accettata (loop di 10 m):

  • 'key' in mydict tempo trascorso 1.07 sec
  • mydict.get('key') tempo trascorso 1.84 sec
  • mydefaultdict['key'] tempo trascorso 1.07 sec

Pertanto l'uso di in o defaultdict è raccomandato contro get .




Bene ... Sarai familiare che la ricerca dell'esistenza di un elemento in un elenco o di dati significa attraversare tutto (almeno per l'elenco non ordinato, ad es. Dict.keys). Invece di usare Eccezione ed errori che si presentano normalmente, possiamo evitare quella complessità ...

d={1:'a',2:'b'}
try:
    needed=d[3]
    print(needed)
except:
    print("Key doesnt exist")






Il dizionario in python ha un metodo get ('chiave', predefinito). Quindi puoi semplicemente impostare un valore predefinito nel caso in cui non ci sia una chiave.

values = {...}
myValue = values.get('Key', None)



Io uso il try / except ; se viene lanciata un'eccezione, la chiave non è presente nel dizionario. esempio:

st = 'sdhfjaks'
d = {}
try:
    print d['st']
except Exception, e:
    print 'Key not in the dictionary'



Related