2011-11-21 39 views
153

Ben piton aşağıdaki sözlüğü:nasıl kontrol etmek

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

Ben bir değer "bir", "iki" var gibi eğer bulmak için bir yol gerekir bu sözlükte. Bilmek istediğim eğer

Örneğin, dizin "1" Ben sadece yazmak zorunda olacağını var olsaydı:

"1" in d 

Ve bu doğru veya yanlış olup olmadığını o zaman piton bana anlatırdı, ancak gerek Bir değer olup olmadığını bulmak dışında aynı şeyi yapın.

cevap

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

, bazı karşılaştırmalı zamanlama:

DÜZENLEME
>>> 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] 

: Ve merak durumda neden ... neden yukarıdaki her nesnenin farklı türde bir döndüren yani, ya da arama işlemleri için uygun olmayabilir olabilir:

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

EDIT2: talebine göre yorumlarda ...

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

Elimde python yok, testleri 'one' yerine 'four' ile tekrar çalıştırır mısın? – soulcheck

+0

@soulcheck - İkinci düzenlememe bak! : – mac

+2

, daha büyük bir dikte koşmadıkça her şeyden önce değildi. Sanırım değerlerdeki() değerler, görüntüyü canlı tutmak suretiyle değer listesinin ve görünüm değerlerinin() kopyalanmasından kaynaklanır. – soulcheck

23

Sen "one" senin sözlüğün değerleri arasında olup olmadığını test etmek

"one" in d.itervalues() 

kullanabilirsiniz.

+0

@SvenMaramach Açıkçası, Değerlere bakar, ama anahtarlara nasıl bakarsınız? Anahtarlara uygulanabilir mi? – cbbcbail

+2

@cbbcbail: '' '' '' 'tuşları arasında' '' '' ifadesinin görünüp görünmediğini sınamak için d''de '' bir '' ifadesini kullanın. –

+0

Belirli bir anahtarın değer içerip içermediğini nasıl kontrol edersiniz? (çiftleri önlemek için) – jester112358

8

Kullanım sözlüğü görünümler:

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

Python sözlük vardır Örnek için get(key) funcion

>>> d.get(key) 

,

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

anahtar yaparsa

nt var, 01 dönecekdeğeri. 3,0'dan daha az ve 5.0'dan büyük versiyonlarına ilgili

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

İçerik. .

+6

Soruyu yanıtlamıyor. OP, "anahtar: değer" gibi bir değer hakkında sordu ve anahtar değil. – akshaynagpal

İlgili konular