Python 在字典列表中搜索与嵌套键匹配的所有嵌套值

Python search for all nested values in list of dictionaries that matches a nested key

我有以下词典列表:

data = [
    {
        "connections": None
    },
    {
        "connections": {
            "endpoints": [
                {
                    "id": "ee0d38d3-89fb-4e5b-b9bd-83ee554949ab",
                    "vlan": 200,
                },
                {
                    "id": "192ee48f-ad20-48ad-acae-9c8d33e4687b",
                    "vlan": 100,
                },
            ]
        }
    },
    {
        "connections": {
            "endpoints": [
                {
                    "id": "4e6b8844-9a91-4098-aa92-ef97ce89cbed",
                    "vlan": 200,
                },
                {
                    "id": "577fcb45-57ab-4903-be60-5b8ac84b8a09",
                    "vlan": 100,
                },
            ]
        }
    },
]

我想在数据中搜索 'id'“ee0d38d3-89fb-4e5b-b9bd-83ee554949ab”并提取任何匹配项的所有 vlan 'id'。所以在这个例子中,我的结果变量应该只包含一个匹配列表:

[100]

我说一个列表是因为 'id' "ee0d38d3-89fb-4e5b-b9bd-83ee554949ab" 也可能在数据中有另一个条目,但具有不同的 vlan。所以你最终可能会得到我的结果:

[200, 300]

我尝试了以下操作,但出现“类型错误:'NoneType' 对象不可订阅”:

vlans = [d["connections"]["endpoints"]["vlan"] for d in data if d["connections"]["endpoints"]["id"] == id]

你做如下的事情:

res = [endpoint['vlan'] for item in data if item["connections"] for endpoint in item["connections"]["endpoints"] if endpoint['id']== "ee0d38d3-89fb-4e5b-b9bd-83ee554949ab"]

如果您需要唯一的 vlan 值,您可以使用

list(set(res))