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))
我有以下词典列表:
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))