确定json对象是否包含某个值的Pythonic方法?

MrD*_*Duk 5 python python-2.7

我有一个从调用中返回的 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': {
        '...': '...',
    },
}
Run Code Online (Sandbox Code Playgroud)

ecs_scaling除了标准之外,是否有更 Pythonic 的方法来简单地确定 Key 是否存在:

data = json.loads(theThing)
for key in data.items():
   ... 
Run Code Online (Sandbox Code Playgroud)

密钥可能是第一个项目,也可能是第 40 个项目——理想情况下,我希望能够做类似的事情if 'ecs_scaling' in theKeys: ...

Zac*_*tes 6

您可以使用内置的any.

如果可迭代对象的任何元素为真,则返回 True。如果可迭代对象为空,则返回 False。

if any(tag['key'] == 'ecs_scaling' for tag in data['Tags']):
    ...
Run Code Online (Sandbox Code Playgroud)

  • 与“对于 data.items() 中的键:”相同的复杂性 (2认同)
  • @Xire:我相信 `tag['key'] == 'ecs_scaling'` 会比 tag.items()` 中的 `'ecs_scaling' 快,因为不能保证 `key` 项将是第一个元素`tag.items()`(您可能最终会迭代其他项目),而不是选择适当的键。编辑:如果你指的是右腿的方法,对我来说似乎它会更慢。 (2认同)