Python,遍历dictionary对象中的多个列表以查找特定值

Python,遍历dictionary对象中的多个列表以查找特定值,python,Python,将数据拉到RESTapi上,剩下的是一个包含多个列表的dictionary对象。我在其中一个列表中寻找一个非常具体的数据点,但是列表的实际数量随字典中的每个项目而变化 我曾尝试使用索引等方式手动拉取此字段,但由于列表不总是在同一个位置,我的头撞到了墙上。API结果如下所示 b = [ {'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 1, 'value': 'x.x.x.x'}]},

将数据拉到RESTapi上,剩下的是一个包含多个列表的dictionary对象。我在其中一个列表中寻找一个非常具体的数据点,但是列表的实际数量随字典中的每个项目而变化

我曾尝试使用索引等方式手动拉取此字段,但由于列表不总是在同一个位置,我的头撞到了墙上。API结果如下所示

    b = [
    {'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 1, 'value': 'x.x.x.x'}]},
      {'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 0, 'value': 'y.y.y.y'}, {'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}]},
       {'internal': False, 'protocol_parameters': [{'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}, {'name': 'identifier', 'id': 0, 'value': 'z.z.z.z'}]}]

for a in b:
     c = (a['protocol_parameters'])[0].get('value')
     print(c)
这当然不会正确解析,因为列表不在一致的位置,所以我很好奇是否可以解析字典中的所有列表,查找特定的字符串。我的最终目标如下所示,与列表位置无关

x.x.x.x
y.y.y.y
z.z.z.z

在本例中,查找包含标识符的所有列表。如果这是noob错误,我深表歉意:谢谢您抽出时间。

据我所知,您需要从包含name=identifier的协议参数项中选择值字段

您可以使用“下一步”从协议参数列表中查找与该条件匹配的第一项。见下文:

records = [{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 1, 'value': 'x.x.x.x'}]},
{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 0, 'value': 'y.y.y.y'}, {'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}]},
{'internal': False, 'protocol_parameters': [{'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}, {'name': 'identifier', 'id': 0, 'value': 'z.z.z.z'}]}
]

for record in records:
     identifier_param = next((prot_param for prot_param in record['protocol_parameters'] if prot_param['name']=='identifier'), None)
     if identifier_param:
         print(identifier_param['value'])
印刷品

x.x.x.x
y.y.y.y
z.z.z.z
这应该起作用:

b = [{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 1, 'value': 'x.x.x.x'}]},
{'internal': False, 'protocol_parameters': [{'name': 'identifier', 'id': 0, 'value': 'y.y.y.y'}, {'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}]},
{'internal': False, 'protocol_parameters': [{'name': 'incomingPayloadEncoding', 'id': 1, 'value': 'UTF-8'}, {'name': 'identifier', 'id': 0, 'value': 'z.z.z.z'}]}]

for a in b:
     c = next(param.get('value') for param in a['protocol_parameters'] if param.get('name')=="identifier")
     print(c)

为b显示的值导致语法错误:无效语法。请回答您的问题并加以解决。您所说的列表不一致是什么意思?似乎所有列表都在protocol_参数键下。你的b表达式也是无效的。。。这是一个dict,一个dict列表吗?你的代码现在还不能工作。你能修一下吗?b变量的语法无效,这是我试图混淆API结果的尝试。在本例中,B是字典协议参数的列表,每个参数中都有多个列表。我希望这是有道理的。太棒了!我不熟悉下一个函数,但那真的很棒。按预期产出。