的價值觀我有一本字典其中的值是一個元組評估字典
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