python ciclo for - Controlla se una determinata chiave esiste già in un dizionario





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

python dictionary

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?




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 .







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', [])



I modi in cui puoi ottenere i risultati sono:

  • se your_dict.has_key (chiave) Rimosso in Python 3
  • se digiti your_dict
  • prova / tranne il blocco

Quale è meglio dipende da 3 cose:

  1. Il dizionario "normalmente ha la chiave" o "normalmente non ha la chiave".
  2. Intendi usare condizioni come se ... else ... elseif ... else?
  3. Quanto è grande il dizionario?

Ulteriori informazioni: http://paltman.com/try-except-performance-in-python-a-simple-test/

Uso di try / block invece di "in" o "if":

try:
    my_dict_of_items[key_i_want_to_check]
except KeyError:
    # Do the operation you wanted to do for "key not present in dict".
else:
    # Do the operation you wanted to do with "key present in dict."



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.




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



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