2016-04-02 11 views
-1

Bir sözlüğün VEYA'da iki arama yapmak yerine, yalnızca bir komutla anahtarlarının yanı sıra değerlerinde de belirli bir değerin olup olmadığını kontrol etmeye çalışıyorum. Yani Bu şartları ile internet aramaPython: Bir öğenin sözlükte olup olmadığını kontrol etme. Anahtar OR değeri

'b' in d.keys() 
'b' in d.keys() or 'b' in d.values() 

arama sadece anahtarlarını ya da sadece değerlerini nasıl yapılacağına ilişkin talimatlar başka bir şey geri döndü.

d = {'a':'b'} 
d.items()   ## this is the closest thing I could find to all the items 
'b' in d.items() ## but this returns false 
+0

Bunu neden yapmak istiyorsunuz? İki adet _or_ arama yapmanın nesi yanlış? Bunun için –

cevap

0

d.items() sorun çok 'b'[('a', 'b')] olmayacak dizilerini olarak temsil edilir anahtar/değer çiftleri bir listesini verir olmasıdır.

all_items = d.keys() + d.values() 
'b' in all_items 
2

Bunu yapmak için tek bir işlev yoktur. Yapacak ya gerekecek() (anahtarlar olmadan hızlıdır):

'b' in d or 'b' in d.values() 

veya öğelerin üzerinde döngü çeşit:

for i in d.items(): 
    if 'b' in i: 
     return True 
return False 

ya:

any(('b' in i) for i in d.items()) 

PS. Aynı zamanda kötü bir tasarıma işaret ediyor. Sözlükler anahtar aramalar için iyidir, çünkü bunlar hızlıdır. Hem anahtarları hem de değerleri kontrol ederseniz, sadece depolanan tüm öğeleri incelersiniz. (ve hangi tarafa baktığınızdan bile emin olmadığınızı gösterir) sets ve diktelerin bazı kombinasyonlarının yapmak istediğiniz şey için daha uygun olup olmadığını kontrol etmenizi öneririm.

+0

'(d.items() içinde' i için i 'ifadesi +1 – John

İlgili konular