2014-11-05 30 views
3

比方說,我有一個容器,如字典或列表。什麼是Python方法來測試容器的所有值是否等於給定值(如None)?如何測試容器中所有項目的值?

我的幼稚實現是隻使用一個布爾標誌,就像我在C中所教的那樣,因此代碼可能看起來像這樣。

a_dict = { 
    "k1" : None, 
    "k2" : None, 
    "k3" : None 
} 

carry_on = True 
for value in a_dict.values(): 
    if value is not None: 
     carry_on = False 
     break 

if carry_on: 
    # action when all of the items are the same value 
    pass 

else: 
    # action when at least one of the items is not the same as others 
    pass 

雖然這種方法工作得很好,但它給人的感覺並不正確,因爲Python處理其他常見模式的方式非常奇妙。什麼是正確的方法來做到這一點?我想也許內置all()函數會做我想要的,但它只測試布爾上下文中的值,我想與任意值進行比較。

回答

8

您仍然可以使用all,如果你在一個generator expression補充:

if all(x is None for x in a_dict.values()): 

或者爲任意值:

if all(x == value for x in a_dict.values()): 
+0

它不應該是'x不None'要一致在例子中用'carry_on'? – 2014-11-05 16:26:46

+0

我認爲這個例子不正確,因爲OP說:「什麼是Python方法來測試容器的所有值是否等於**到給定值(如None)?」 – iCodez 2014-11-05 16:27:38

+0

完美,謝謝! – 2014-11-05 16:31:55

相關問題