Python根据字典中的条件查找obj值

Python根据字典中的条件查找obj值,python,dictionary,conditional,Python,Dictionary,Conditional,我从python请求中获得以下json数据: { "results": [ { "name": "virtual-machine-1", "guest": "Microsoft Windows Server 2016 (64-bit)", "status": "green", "id": "567890-004", }, {

我从python请求中获得以下json数据:

{
    "results": [
        {
            "name": "virtual-machine-1",
            "guest": "Microsoft Windows Server 2016 (64-bit)",
            "status": "green",
            "id": "567890-004",
        },
        {
            "name": "virtual-machine-2",
            "guest": "CoreOS Linux (64-bit)",
            "status": "green",
            "id": "567890-005",
        }
    ]
}
如何根据“name”值获取所有字典的“id”值


我已经看到了在同一个字典中基于键(而不是基于条件)查找值并对多个字典进行迭代的解决方案。感谢您的帮助。

您正在键入id:

>>> {result['id']: result['name'] for result in data['results']}
{'567890-004': 'virtual-machine-1', '567890-005': 'virtual-machine-2'}

这种技巧被称为字典理解

将json转换为字典列表。那就用速记来表达吧

results = [
{ "name": "virtual-machine-1",
            "guest": "Microsoft Windows Server 2016 (64-bit)",
            "status": "green",
            "id": "567890-004"},
{"name": "virtual-machine-2",
            "guest": "CoreOS Linux (64-bit)",
            "status": "green",
            "id": "567890-005"}
]

id = [x['id'] for x in results if x['name'] == "virtual-machine-1"]
print id    # prints 567890-004

id = [x['id'] for x in results if x['name'] == "virtual-machine-2"]
print id    # prints 567890-005

什么意思?您是否试图从结果字典中获取“id”的所有值,其中name==some string?仅当结果包含name键时才会返回id,以获取帮助。得到了我所需要的,并且了解了字典的理解。我很难写出一个格式化的评论,因此需要大量的编辑。很抱歉,在查看您的解决方案时,id返回了“[]”,但没有找到匹配项。
例如,上面没有“virtual-machine-3”,如果我尝试使用
id=[x['id'],如果x['name']==“virtual-machine-3”]打印id#打印[]
我预计会出现错误,因为如果我在某处使用“assert id is not None”验证结果,它会为空值返回“True”。
results = [
{ "name": "virtual-machine-1",
            "guest": "Microsoft Windows Server 2016 (64-bit)",
            "status": "green",
            "id": "567890-004"},
{"name": "virtual-machine-2",
            "guest": "CoreOS Linux (64-bit)",
            "status": "green",
            "id": "567890-005"}
]

id = [x['id'] for x in results if x['name'] == "virtual-machine-1"]
print id    # prints 567890-004

id = [x['id'] for x in results if x['name'] == "virtual-machine-2"]
print id    # prints 567890-005