判断json对象是否包含某个值的python方法?

2024-05-21 17:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从调用中返回的json对象,类似于:

{
    'Tags': [
        {
            'Key': 'Dept',
            'PropagateAtLaunch': True,
            'ResourceId': 'my-auto-scaling-group',
            'ResourceType': 'auto-scaling-group',
            'Value': 'Research',
        },
        {
            'Key': 'Role',
            'PropagateAtLaunch': True,
            'ResourceId': 'my-auto-scaling-group',
            'ResourceType': 'auto-scaling-group',
            'Value': 'WebServer',
        },
        {
            'Key': 'ecs_scaling',
            'PropagateAtLaunch': True,
            'ResourceId': 'my-auto-scaling-group',
            'ResourceType': 'auto-scaling-group',
            'Value': 'true',
        },
    ],
    'ResponseMetadata': {
        '...': '...',
    },
}

除了标准的方法之外,还有没有一种更简单的方法来确定键ecs_scaling是否存在:

^{pr2}$

键可以是第一个项目,也可以是第40个项目——理想情况下,我希望能够执行类似^{的操作?在


Tags: 项目对象方法keyjsontrueautovalue
3条回答

复杂度已经是线性的,所以您希望的唯一更快的事情就是哈希搜索。 然而,构造哈希集或哈希表需要线性复杂度。在

因此,除非您从json模块调用的函数已经构建了这样一个散列集,否则对于线性复杂度而言,迭代是最好的选择,即O(n)。在

在这方面,我认为最具python风格的方法是使用any内置的,另一个已经提到过了。在

出于完整性的考虑,尽管它的性能会降低,但您也可以使用列表理解,这通常被认为是“高度python”:

'ecs_scaling' in [item['Key'] for item in data.items()]

这不是很好,因为必须构建一个额外的列表,这需要对整个数据进行迭代。在

您可以使用内置的^{}。在

Return True if any element of the iterable is true. If the iterable is empty, return False.

if any(tag['key'] == 'ecs_scaling' for tag in data['Tags']):
    ...
any(el['Key'] == 'ecs_scaling' for el in data['Tags'])

相关问题 更多 >