2013-08-07 5 views
0

У меня есть словарь, где значения являются кортежемоценивающих значений словаря

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

Мне нужно выяснить, если все значения не имеют «» или None в третьем элементе.
Это просто должна быть логическая оценка.
Что является самым кратким способом сделать это?

Это то, что я сделал:

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

Но я думаю, что будет лучше «любой» формы к этому?

+0

Могла ли быть сделана попытка с вашей стороны? – Amndeep7

+0

Что вы подразумеваете под «любой формой»? Вы спрашиваете, есть ли способ написать это с помощью 'any()' вместо этого? Это будет 'any (v [2] не None и v [2]! = '' Для v в dict.values ​​())'. Кстати, если вы проверяете '' '' или '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()) 
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.

Смежные вопросы