我有字典串列
- 我需要先檢查字典中是否存在 email_id
- 如果存在,則回傳該特定字典
- 如果 email_id 不存在,則只檢查
group串列
test = [
{
"email": "[email protected]",
"type": "Group"
},
{
"email": "[email protected]",
"type": "Single"
}
]
代碼如下
group = ['[email protected]', '[email protected]', '[email protected]']
email_id = "[email protected]"
def teat():
for each in test:
if email_id == each['email']:
return (each)
else:
for ad_group in group:
if ad_group == each['email'] :
return (each)
teat()
我的輸出是
{'email': '[email protected]', 'type': 'Group'}
但預期是
{'email': '[email protected]', 'type': 'Single'}
uj5u.com熱心網友回復:
因為第一個條件需要對整個串列進行詳盡的搜索,所以您確實需要兩個回圈。一個檢查第一個條件,一個檢查第二個條件。
def teat():
for each in test:
if email_id == each['email']:
return each
for each in test:
if each['email'] in group:
return each
uj5u.com熱心網友回復:
如果您不想重復相同的串列兩次,請使用此方法:
def teat():
email_match = None
group_match = None
for each in test:
if email_id == each['email']:
email_match = each
break
for ad_group in group:
if ad_group == each['email']:
group_match = each
return email_match or group_match
uj5u.com熱心網友回復:
您需要分別運行兩個 for 回圈。在您當前的代碼中,一旦您的第一封電子郵件不匹配,您就會開始搜索組匹配。
def teat():
for each in test:
if email_id == each['email']:
return (each)
for each in test:
for ad_group in group:
if ad_group == each['email'] :
return (each)
uj5u.com熱心網友回復:
在您的代碼中, if 和 else 都回傳了一些東西,這意味著它不會遍歷整個串列。
我稍微修改了你的代碼。
def teat():
for each in test:
if email_id == each['email']:
mydict = each
return mydict
else:
for ad_group in group:
if ad_group == each['email'] :
mydict = each
return mydict
輸出:
{'email': '[email protected]', 'type': 'Single'}
uj5u.com熱心網友回復:
我說您本質上想要回傳的是串列中最后一個匹配的字典(至少,首選答案似乎確實這樣做)是否正確?如果是這種情況,為什么不從末尾開始處理串列并回傳滿足兩個條件之一的第一個元素?
def teat():
for i in range(len(test) - 1, -1, -1):
each = test[i]
if email_id == each['email'] or each['email'] in group:
return each
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373953.html
