的价值观我有一本字典其中的值是一个元组评估字典
dict={'A':('1','2','3'),'B':('2','3','xxxx')....}
我需要找出如果所有值都在他们的第三个元素的“”或无。
它只是需要一个布尔评估。
什么是最简洁的方法来做到这一点?
这是我做过什么:
all(not v[2] for v in dict.values())
,但我想会有一个更好的“任意”的形式呢?
的价值观我有一本字典其中的值是一个元组评估字典
dict={'A':('1','2','3'),'B':('2','3','xxxx')....}
我需要找出如果所有值都在他们的第三个元素的“”或无。
它只是需要一个布尔评估。
什么是最简洁的方法来做到这一点?
这是我做过什么:
all(not v[2] for v in dict.values())
,但我想会有一个更好的“任意”的形式呢?
你可以使用(使用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
调用'values()'会创建字典值列表,这可能很大。 'itervalues()'会是更好的选择,就像@JAB的解决方案一样。 – nofinator
@nofinator:我的歉意。我在Py3x上测试了这个代码,完全忘了添加itervalues。谢谢你提醒我。 :) –
的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())
如何:
all(dict[k][2] is None or dict[k][2] == "" for k in dict)
reduce(lambda x,y: x and y[2] not in ('', None), d.values(), True)
下面是一个简单实用的解决方案:
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。
您可以试一试吗? – Amndeep7
你是什么意思的“任何”形式“?你问是否有一种方法可以用'any()'来代替?在dict.values())中,它将是'any(v [2]不是None和v [2]!='')。顺便说一句,如果你正在检查''''或'None',你不应该依赖这两者的真实性,因为你也可能错误地评估整数或列表的真实性。 – 2rs2ts