[英]Extracting matching values from nested dictionary
如果值與列表中的值匹配,我正在嘗試從嵌套字典中提取值。
data = [
{
"id": 12345678,
"list_id": 12345,
"creator_id": 1234567,
"entity_id": 1234567,
"created_at": "2020-01-30T00:43:55.256-08:00",
"entity": {
"id": 123456,
"type": 0,
"first_name": "John",
"last_name": "Doe",
"primary_email": "john@fakemail.com",
"emails": [
"john@fakemail.com"
]
}
},
{
"id": 12345678,
"list_id": 12345,
"creator_id": 1234567,
"entity_id": 1234567,
"created_at": "2020-01-30T00:41:54.375-08:00",
"entity": {
"id": 123456,
"type": 0,
"first_name": "Jane",
"last_name": "Doe",
"primary_email": "jane@fakemail.com",
"emails": [
"jane@fakemail.com"
]
}
}
]
代碼如下。
match_list = ['jane@fakemail.com',[]]
first_names = []
email = []
for i in match_list:
for record in data:
if 'primary_email' == i:
email.append(record.get('entity',{}).get('primary_email', None))
first_names.append(record.get('entity',{}).get('first_name', None))
print(first_names)
print(email)
而不是返回匹配的值,這只會返回空列表。 任何幫助在這里將不勝感激。
預期的輸出是
first_names = ['Jane'] and email = ['jane@fakemail.com']
將臨時值存儲在變量中,以使您的代碼更易於處理:
emails = []
names = []
match_list = ['jane@fakemail.com',[]]
for item in data:
entry = item.get('entity', {})
fName = entry.get('first_name', '')
pMail = entry.get('primary_email', '')
if pMail in match_list:
print (fName)
print (pMail)
emails.append(pMail)
names.append(fName)
輸出:
Jane
jane@fakemail.com
在代碼的第 6 行
if 'primary_email' == i:
您將 match_list(即 'i')中的元素與字面上名為 'primary_email' 的字符串而不是實際的電子郵件進行比較。 因為 'jane@fakemail.com' 不等於 'primary_email'(字面意思是字符串)。
而是使用
if record['entity']['primary_email'] == i:
並且您的代碼應該按預期工作。
在您的代碼中,當您比較'primary_email'==i
,您總是會得到一個空列表,該列表將始終為False
。
將其更改為record['entity']['primary_email']==i
。
這里沒有必要使用get
。因為如果mail
與任何primary_email
都不匹配,那么什么都不會發生。 primary_email
只有在滿足條件d['entity']['primary_email']==mail
時才會添加。
試試這個 我稍微重構了你的代碼。
In [25]: for mail in match_list:
...: for d in data:
...: if d['entity']['primary_email']==mail:
...: first_name.append(d['entity']['first_name'])
...: emails.append(d['entity']['primary_email'])
輸出
In [26]: emails
Out[26]: ['jane@fakemail.com']
In [27]: first_name
Out[27]: ['Jane']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.