python ciclo for - Controlla se una determinata chiave esiste già in un dizionario
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
.
Che dire dell'utilizzo di EAFP (più facile chiedere il perdono che il permesso):
try:
blah = dict["mykey"]
# key exists in dict
except KeyError:
# key doesn't exist in dict
Vedi altri post SO:
Verifica dell'esistenza del membro in Python
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:
- Il dizionario "normalmente ha la chiave" o "normalmente non ha la chiave".
- Intendi usare condizioni come se ... else ... elseif ... else?
- 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'