4

给定一本字典:

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

我需要找到总是pw包含''or *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包含' 'or '*sss*'

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

4

3 回答 3

4

['*sss*' or '']返回['*sss*'],因为''它是 False 并且*sss*被认为是 True。

这意味着您的列表显示为[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 ''
于 2013-07-20T09:20:13.193 回答
1

使用set一行中完成。

ans = {d['pw'] for d in data}.issubset({'','*sss*'})

ansTrue如果d['pw']总是''否则'*sss*'_False

于 2013-07-20T09:22:54.390 回答
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'
于 2013-07-20T09:23:16.223 回答