2011-11-21 13 views
153

Ho la seguente dizionario in Python:Come verificare se un valore è presente in un dizionario (python)

d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 

Ho bisogno di un modo per trovare se un valore come "uno" o "due" esiste in questo dizionario.

Per esempio, se volevo sapere se l'indice "1" esisteva avrei semplicemente digitare:

"1" in d 

E poi python mi diceva se questo è vero o falso, però ho bisogno di fai la stessa identica cosa eccetto per scoprire se esiste un valore.

risposta

237
>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 
>>> 'one' in d.values() 
True 

Per curiosità, un po 'i tempi di confronto:

>>> T(lambda : 'one' in d.itervalues()).repeat() 
[0.28107285499572754, 0.29107213020324707, 0.27941107749938965] 
>>> T(lambda : 'one' in d.values()).repeat() 
[0.38303399085998535, 0.37257885932922363, 0.37096405029296875] 
>>> T(lambda : 'one' in d.viewvalues()).repeat() 
[0.32004380226135254, 0.31716084480285645, 0.3171098232269287] 

EDIT: E nel caso in cui ti chiedi perché ... il motivo è che ciascuno dei sopra restituisce un diverso tipo di oggetto, che può essere o non essere adatto per operazioni di ricerca:

>>> type(d.viewvalues()) 
<type 'dict_values'> 
>>> type(d.values()) 
<type 'list'> 
>>> type(d.itervalues()) 
<type 'dictionary-valueiterator'> 

EDIT2: come per richiesta nei commenti ...

>>> T(lambda : 'four' in d.itervalues()).repeat() 
[0.41178202629089355, 0.3959040641784668, 0.3970959186553955] 
>>> T(lambda : 'four' in d.values()).repeat() 
[0.4631338119506836, 0.43541407585144043, 0.4359898567199707] 
>>> T(lambda : 'four' in d.viewvalues()).repeat() 
[0.43414998054504395, 0.4213531017303467, 0.41684913635253906] 
+0

non ho pitone a portata di mano, potresti rieseguire i test con 'quattro' invece di 'uno'? – soulcheck

+0

@soulcheck - Controlla la mia seconda modifica! : o – mac

+2

dopotutto non era necesarry, a meno che non fosse eseguito su dettatura più grande. Immagino che l'overhead in values ​​() sia causato copiando la lista valori e in viewvalues ​​() mantenendo la vista in vita. – soulcheck

23

È possibile utilizzare

"one" in d.itervalues() 

per verificare se "one" è tra i valori del vostro dizionario.

+0

@SvenMaramach Ovviamente, guarda i valori, ma come guarderesti le chiavi? Può essere applicato alle chiavi? – cbbcbail

+2

@cbbcbail: Per verificare se '" uno "' appare tra i tasti di 'd', basta usare' "uno" in d'. –

+0

Come si controlla se una determinata chiave contiene un valore? (per evitare duplicati) – jester112358

8

Utilizzare viste del dizionario:

if x in d.viewvalues(): 
    dosomething().. 
10

dizionario Python ha get(key) funcion

>>> d.get(key) 

per esempio,

>>> d = {'1': 'one', '3': 'three', '2': 'two', '5': 'five', '4': 'four'} 
>>> d.get('3') 
'three' 
>>> d.get('10') 
none 

Se la chiave fa nt esiste, restituirà none valore.

foo = d[key] # raise error if key doesn't exist 
foo = d.get(key) # return none if key doesn't exist 

contenuti rilevanti per le versioni inferiore a 3,0 e superiore a 5,0. .

+6

Non risponde alla domanda. OP ha chiesto un valore come in "chiave: valore" e non chiave. – akshaynagpal

Problemi correlati