2013-08-07 72 views
0

的價值觀我有一本字典其中的值是一個元組評估字典

dict={'A':('1','2','3'),'B':('2','3','xxxx')....} 

我需要找出如果所有值都在他們的第三個元素的「」或無。
它只是需要一個布爾評估。
什麼是最簡潔的方法來做到這一點?

這是我做過什麼:

all(not v[2] for v in dict.values()) 

,但我想會有一個更好的「任意」的形式呢?

+0

您可以試一試嗎? – Amndeep7

+0

你是什麼意思的「任何」形式「?你問是否有一種方法可以用'any()'來代替?在dict.values())中,它將是'any(v [2]不是None和v [2]!='')。順便說一句,如果你正在檢查''''或'None',你不應該依賴這兩者的真實性,因爲你也可能錯誤地評估整數或列表的真實性。 – 2rs2ts

回答

4

你可以使用(使用itervalues()用於Py2x)

all(elem[2] in ('', None) for elem in test.values()) 

觀看演示 ​​-

>>> test = {'a': (1, 2, None), 'b':(2, 3, '')} 
>>> all(elem[2] in ('', None) for elem in test.values()) 
True 
>>> test['c'] = (1, 2, 3) 
>>> all(elem[2] in ('', None) for elem in test.values()) 
False 
+1

調用'values()'會創建字典值列表,這可能很大。 'itervalues()'會是更好的選擇,就像@JAB的解決方案一樣。 – nofinator

+1

@nofinator:我的歉意。我在Py3x上測試了這個代碼,完全忘了添加itervalues。謝謝你提醒我。 :) –

4

的Python 2:

boolean = all(value[2] in ('', None) for value in your_dict.itervalues()) 

的Python 3:

boolean = all(value[2] in ('', None) for value in your_dict.values()) 
1

如何:

all(dict[k][2] is None or dict[k][2] == "" for k in dict) 
0
reduce(lambda x,y: x and y[2] not in ('', None), d.values(), True) 
0

下面是一個簡單實用的解決方案:

not filter(lambda l : not l, [ v[2] for v in d.values()]) 

它將返回False如果''None未在第三的位置找到,True如果一個的這些值被發現。部分改編自Best way to check if a list is empty