【问题标题】:Python way of finding if a value exist in a boto.jsonresponse.Element class查找 boto.jsonresponse.Element 类中是否存在值的 Python 方法
【发布时间】:2015-04-06 10:41:11
【问题描述】:

我正在使用 Boto 来获取 Route53 运行状况检查列表:

def list_hc():
    conn = boto.route53.connect_to_region('universal')
    listhc = conn.get_list_health_checks()
    return listhc

我得到的结果是 boto.jsonresponse.Element,如下所示:

{u'ListHealthChecksResponse': {u'HealthChecks': [{u'HealthCheckConfig': {u'IPAddress': u'1.1.1.1', u'ResourcePath': u'/', u'RequestInterval': u'30', u'Type': u'HTTP', u'Port': u'80', u'FailureThreshold': u'3'}, u'CallerReference': u'1a311a1c-9da8-424a-9e9d-210ec72738b0', u'HealthCheckVersion': u'1', u'Id': u'1ff1c26f-f0fc-45d2-a008-6dac4dfc3c15'}], u'IsTruncated': u'false', u'MaxItems': u'100'}}

我希望能够检查 IP 是否已经作为 IPAddress 的值存在,如果存在,则获取它的 Id 值。此列表可能有多项运行状况检查。

目前我正在使用这种丑陋的方式来检查 IP 是否存在:

if pubIp in str(listhc['ListHealthChecksResponse'].values()):

但我知道有一种方法可以像字典一样正确地迭代它并获取 key:values,但我在这个 boto.jsonresponse.Element 上找不到这样做的方法

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python boto amazon-route53


    【解决方案1】:

    我可能会这样做:

    ips = [hc['HealthCheckConfig']['IPAddress'] for hc in listhc['ListHealthChecksResponse']['HealthChecks']]
    

    变量ips 应该包含一个IP 地址列表。然后你可以这样做:

    if pubIp in ips:
        <do whatever>
    

    还有其他方法可以做到这一点,但这是我的偏好。

    【讨论】:

    • 谢谢,确实做到了。我正在玩类似的东西,但没有做对。欣赏它:)
    【解决方案2】:

    我发现使用 '.'关于 boto.jsonresponse.Element 是最直接的。比如

    conn.get_list_health_checks().ListHealthChecksResponse.HealthChecks.HealthCheckConfig
    

    应该让你的 boto.jsonresponse.Element

    {u'ListHealthChecksResponse': {u'HealthChecks': [{u'HealthCheckConfig': {u'IPAddress': u'1.1.1.1', u'ResourcePath': u'/', u'RequestInterval': u'30', u'Type': u'HTTP', u'Port': u'80', u'FailureThreshold': u'3'}, u'CallerReference': u'1a311a1c-9da8-424a-9e9d-210ec72738b0', u'HealthCheckVersion': u'1', u'Id': u'1ff1c26f-f0fc-45d2-a008-6dac4dfc3c15'}], u'IsTruncated': u'false', u'MaxItems': u'100'}}
    

    进入以下列表

    [{u'IPAddress': u'1.1.1.1', 
      u'ResourcePath': u'/', 
      u'RequestInterval': u'30', 
      u'Type': u'HTTP', 
      u'Port': u'80', 
      u'FailureThreshold': u'3'}]
    

    然后你就可以把.IPAddress的拉出来了

    我已经对来自 IAM 和 EC2 函数调用的其他 boto.jsonresponse.Elements 做了类似的事情,但我还没有真正处理过 Route53。您可能无法通过 .HealthChecks,因为那里已经有一个列表...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2014-01-31
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      相关资源
      最近更新 更多