2013-07-20 59 views
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包含''*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

「如果可能,我需要在一行中完成」。爲什麼? – Johnsyweb

回答

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 '' 
+0

@ Haidro:謝謝.. – user2558589

+0

@ user2558589不客氣:) – TerryA

+0

@ user2558589我還添加了一種單線解決方案(種類單行) – TerryA

1

使用set做到在單行

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

ansTrue如果d['pw']總是''或其他'*sss*'False

+1

甚至數據庫中的d {'pw'] } <= {'','* sss *'}' – Eric

+0

@Eric Wow!那很好。我不知道子集符號可以用這種方式。 – rnbcoder

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' 
+0

@ukrit Kalra:謝謝 – user2558589

+0

很高興能有所幫助。 :) –