4

与えられた辞書:

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

常にorが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 ''"

これを完了するのを手伝ってください。常にorがpw含まれていることを見つける必要があります。' ''*sss*'

可能であれば、1行で行う必要があります。

4

3 に答える 3

4

['*sss*' or '']は False であり、True と見なされる['*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 ''
于 2013-07-20T09:20:13.193 に答える
1

1 行で実行する場合に使用setします。

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

ans常にまたはそうでTrueない場合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 に答える