2011-11-21 14 views
153

Mam następujący słownika w python:Jak sprawdzić, czy wartość istnieje w słowniku (python)

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

Muszę sposób znaleźć, jeśli takie jak „jeden” i „dwa” istnieje wartość w tym słowniku.

Na przykład, gdybym chciał wiedzieć, czy indeks „1” istniał Chciałbym po prostu trzeba wpisać:

"1" in d 

A potem pyton byłoby mi powiedzieć, czy to prawda czy fałsz, jednak muszę zrób dokładnie to samo, z wyjątkiem znalezienia wartości.

Odpowiedz

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

Z ciekawości, niektóre terminy porównawcza:

>>> 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: A w przypadku, gdy zastanawiam się dlaczego ... powodem jest to, że każdy z powyższych zwraca inny typ obiektu, które mogą lub nie mogą być dobrze nadaje się do operacji odnośników:

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

EDIT2: Jak na zamówienie w komentarzach ...

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

Nie mam pod ręką pytona, czy mógłbyś powtórzyć testy z "czterema" zamiast "jednym"? – soulcheck

+0

@soulcheck - Sprawdź moją drugą edycję! : o – mac

+2

mimo wszystko nie było to konieczne, chyba że uruchomiono na większym dyktacie. Domyślam się, że wartości() są powodowane przez kopiowanie listy wartości i wartości viewVue() przez utrzymywanie widoku przy życiu. – soulcheck

23

Można użyć

"one" in d.itervalues() 

aby sprawdzić, czy jest "one" między wartościami słownika.

+0

@SvenMaramach Oczywiście wygląda na Wartości, ale jak byś spojrzał na klucze? Czy można go zastosować do klawiszy? – cbbcbail

+2

@ cbbcbail: Aby sprawdzić, czy '' jeden '' pojawia się wśród klawiszy 'd', po prostu użyj' "jeden" w d'. –

+0

Jak sprawdzić, czy określony klucz zawiera wartość? (aby uniknąć duplikatów) – jester112358

8

Używaj słownika odsłony:

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

słownika Python get(key) función

>>> d.get(key) 

na przykład

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

Jeśli robi każdy klawisz nt istnieje, zwróci none wartość.

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

treści istotne dla wersji mniejsza niż 3,0 i większa niż 5,0. .

+6

Nie odpowiada na pytanie. OP zapytał o wartość jak w 'key: value', a nie key. – akshaynagpal

Powiązane problemy