我正在尝试从此示例字典中的“externalIps”键中提取所有值
{
"a": {},
"b": {},
"c": {},
"d": {
"us-east1-b": {
"vm1": {
"externalIps": [
"1.1.1.1"
],
"resourceowner": "[email protected]"
}
}
},
"e": {
"us-east1-b": {
"vm2": {
"externalIps": [
"2.2.2.2"
],
"resourceowner": "[email protected]"
},
"vm3": {
"externalIps": [
"3.3.3.3"
],
"resourceowner": "[email protected]"
},
"vm4": {
"externalIps": [
"4.4.4.4"
],
"resourceowner": "[email protected]"
}
}
},
"f": {},
"g": {
"us-east1-b": {
"vm5": {
"externalIps": [
"5.5.5.5"
],
"resourceowner": "[email protected]"
}
}
},
}
我在 linux 上使用 python 3.7.3。我尝试了很多东西,例如 "for key, value in" ,以及我在网上搜索的其他东西。鉴于到处都有不同的键,我不确定如何只引用“externalIps”键并获取其值。
我得到的最接近的是这样的东西,当我尝试转到 key5 时,它似乎效率极低并且失败了
for key1 in json_data.keys():
for key2 in json_data[key1].keys():
for key3 in json_data[key1][key2].keys():
for key4 in json_data[key1][key2][key3].keys():
print(key4)
我希望结果是这样的:
1.1.1.1,2.2.2.2,3.3.3.3,4.4.4.4,5.5.5.5
您可以使用递归来完成您所需要的:
d = {
"a": {},
"b": {},
"c": {},
"d": {
"us-east1-b": {
"vm1": {
"externalIps": [
"1.1.1.1"
],
"resourceowner": "[email protected]"
}
}
},
"e": {
"us-east1-b": {
"vm2": {
"externalIps": [
"2.2.2.2"
],
"resourceowner": "[email protected]"
},
"vm3": {
"externalIps": [
"3.3.3.3"
],
"resourceowner": "[email protected]"
},
"vm4": {
"externalIps": [
"4.4.4.4"
],
"resourceowner": "[email protected]"
}
}
},
"f": {},
"g": {
"us-east1-b": {
"vm5": {
"externalIps": [
"5.5.5.5"
],
"resourceowner": "[email protected]"
}
}
},
}
def fn(d, rv):
for k, v in d.items():
if k == 'externalIps':
rv.append(v[0])
if isinstance(v, dict):
fn(v, rv)
l = []
fn(d, rv=l)
print(l)
印刷:
['1.1.1.1', '2.2.2.2', '3.3.3.3', '4.4.4.4', '5.5.5.5']
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句