2013-08-07 73 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