从字典中查找值和键并验证它们

时间:2013-07-20 09:18:53

标签: python

给出一本字典:

data = [{'id':'1234','name':'Jason','pw':'*sss*'},
    {'id':'2345','name':'Tom','pw': ''},
    {'id':'3456','name':'Art','pw': ''},
    {'id':'2345','name':'Tom','pw':'*sss*'}]

我需要发现始终pw包含''*sss*

我试过这样做:

for d in data:
    if d['pw'] == ['*sss*' or '']
        print "pw verified and it is '*sss*' or '' "
    else:
        print "pw is not any of two'*sss*' or ''"

请帮我完成此操作。我需要找到始终pw包含' ''*sss*'

如果可能,我需要在一行中完成。

3 个答案:

答案 0 :(得分:4)

['*sss*' or '']返回['*sss*'],因为''为假,*sss*为真。

这意味着您的列表显示为[True or False]。并选择True因子(在本例中为*sss*

您可能打算做以下事情:

if d['pw'] in ['*sss*', '']:

甚至:

if d['pw'] == '*sss*' or d['pw'] == '':

作为一个班轮(有点):

>>> for res in ("pw verified and it is '*sss*' or '' " if i['pw'] in ['*sss', ''] else "pw is not any of two'*sss*' or ''" for i in data):
...     print res
... 
pw is not any of two'*sss*' or ''
pw verified and it is '*sss*' or '' 
pw verified and it is '*sss*' or '' 
pw is not any of two'*sss*' or ''

答案 1 :(得分:1)

使用set一行中执行此操作。

ans = {d['pw'] for d in data}.issubset({'','*sss*'})
如果ans始终为Trued['pw']则为''

,则

'*sss*'False

答案 2 :(得分:0)

如果您正在寻找一个班轮,请使用all()功能。

>>> data = [{'id':'1234','name':'Jason','pw':'*sss*'},
    {'id':'2345','name':'Tom','pw': ''},
    {'id':'3456','name':'Art','pw': ''},
    {'id':'2345','name':'Tom','pw':'*sss*'}]
>>> all(elem['pw'] in ('', '*sss*') for elem in data)
True

对于if条件。

>>> "pw verified" if all(elem['pw'] in ('', '*sss*') for elem in data) else "pw not verified"
'pw verified'