2010-09-08 25 views
2

我想測試一個字符串是否存在於defaultdict中的任何列表值中。Python:測試值是否存在於defaultdict列表中

例如:

from collections import defaultdict 
animals = defaultdict(list) 
animals['farm']=['cow', 'pig', 'chicken'] 
animals['house']=['cat', 'rat'] 

我想知道,如果「牛」在任何動物中列出的發生。

'cow' in animals.values() #returns False 

我想要的東西,將返回這樣的情況「真」。是否有相當於:

'cow' in animals.values() 

for defaultdict?

謝謝!

+0

不要讓'defaultdict'混淆你。如果你有一個常規的'dict',你仍然會遇到同樣的問題。 'animals.values()'是列表的列表,而不是字符串列表。 – 2010-09-08 11:56:59

+0

是的,確實如此。謝謝您的幫助。 – Jake 2010-09-08 12:31:05

回答

12

defaultdict在這種情況下與常規字典沒有什麼不同。您需要遍歷值的字典:

any('cow' in v for v in animals.values()) 

或多個程序上:

def in_values(s, d): 
    """Does `s` appear in any of the values in `d`?""" 
    for v in d.values(): 
     if s in v: 
      return True 
    return False 

in_values('cow', animals) 
0

這個例子將壓平的列表,檢查每個元素,如下將返回真或假:

>>> from collections import defaultdict 
>>> animals = defaultdict(list) 
>>> animals['farm']=['cow', 'pig', 'chicken'] 
>>> animals['house']=['cat', 'rat'] 

>>> 'cow' in [x for y in animals.values() for x in y] 
True 
0
any("cow" in lst for lst in animals.itervalues()) 
相關問題