给出一本字典:
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*'
。
如果可能,我需要在一行中完成。
答案 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
始终为True
或d['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'