a= [{
"data" : {
"check": true,
},
"AMI": {
"status": 1,
"firewall":{
"status": enable
},
"d_suffix": "x.y.com",
"id": 4
},
"tags": [ #Sometime tags could be like "tags": ["default","auto"]
"default"
],
"hostname": "abc.com",
}
]
如何根据标签获取主机名?我正在尝试使用
实现它for i in a:
if i['tags'] == 'default':
output = i['hostname']
但它失败了,因为'标签'是一个没有映射到主机名密钥的列表。有什么办法可以在'标签的基础上获得主机名?
答案 0 :(得分:1)
要将所有主机名标记为默认主机名,请使用list comprehension:
def_hostnames = [i['hostname'] for i in a if 'default' in i['tags']]
print('Default hostnames: %s' % ','.join(def_hostnames))
如果您只想要第一次点击,请使用def_hostnames[0]
或等效的generator expression:
print('first: %s' % next(i['hostname'] for i in a if 'default' in i['tags']))
您当前的代码失败,因为它使用default
,这是一个名为default
的变量。您想要查找字符串默认值。
答案 1 :(得分:1)
使用in
来测试列表中是否有内容。您还需要将default
放在引号中以使其成为字符串。
for i in a:
if 'default' in i['tags']:
output = i['hostname']
break
如果你只需要找到一个匹配项,一旦找到它就应该突破循环。
如果你需要找到多个匹配项,请使用@ phihag的答案和列表理解。
答案 2 :(得分:0)
确保您拥有Json格式的所有内容,例如
HttpClient
然后您可以使用a= [{
"data" : {
"check": True,
},
"AMI": {
"status": 1,
"firewall":{
"status": "enable"
},
"d_suffix": "x.y.com",
"id": 4
},
"tags": [
"default"
],
"hostname": "abc.com",
}
]
in