从嵌套字典中提取匹配值

问题描述 投票:0回答:1

如果值与列表中的值匹配,我正在尝试从嵌套字典中提取值。

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": "[email protected]",
                    "emails": [
                        "[email protected]"
                    ]
                }
            },
            {
                "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": "[email protected]",
                    "emails": [
                        "[email protected]"
                    ]
                }
            }
        ]

代码如下。

match_list = ['[email protected]',[]]
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)

不是返回匹配值,而是仅返回空列表。这里的任何帮助将不胜感激。

python json python-3.x dictionary
1个回答
0
投票

在代码的第六行

    if 'primary_email' == i:

您正在将match_list中的元素(即“ i”)与名为“ primary_email”的字符串而不是实际电子邮件进行比较。因为“ [email protected]”不等于“ primary_email”(字面上是字符串)。

代替使用

if record['entity']['primary_email'] == i:

并且您的代码应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.