在下面的例子中,我试图用另一个键的值替换一个键的值;但是我尝试了多种方式,但它似乎无法发挥作用。
以下是我的代码
d = {
"name" : "ABC",
"type" : "Service",
"clusterRef" : {
"clusterName" : "ABCSTUFF"
},
"serviceState" : "STARTED",
"healthChecks" : [ {
"name" : "STORAGE",
"summary" : "GOOD"
}, {
"name" : "CPU UTILIZATION",
"summary" : "GOOD"
} ],
"maintenanceMode" : "false"
}
########################
## Get Key Value
def get_key_values(d, key):
for k, v in d.items():
if k == "name":
k = (key + "." + v)
else:
k = (key + "." + k)
if isinstance(v, dict):
get_key_values(v, k)
elif isinstance(v, list):
for i in v:
get_key_values(i, k)
else:
print ("{0} : {1}".format(k, v))
get_key_values(d, "TTS")
结果如下:
TTS.serviceState : STARTED TTS.type : Service TTS.ABC : ABC TTS.clusterRef.clusterName : ABCSTUFF TTS.healthChecks.summary : GOOD <<< remove this line and replace "Good" with the value for "TTS.healthChecks.STORAGE" TTS.healthChecks.STORAGE : STORAGE TTS.healthChecks.summary : GOOD <<< remove this line and replace "Good" with the value for "TTS.healthChecks.CPU UTILIZATION" TTS.healthChecks.CPU UTILIZATION : CPU UTILIZATION TTS.maintenanceMode : false
但我希望结果能够跟随
TTS.serviceState : STARTED TTS.type : Service TTS.ABC : ABC TTS.clusterRef.clusterName : ABCSTUFF TTS.healthChecks.STORAGE : GOOD <<< TTS.healthChecks.CPU UTILIZATION : GOOD <<< TTS.maintenanceMode : false
非常感谢任何帮助
答案 0 :(得分:1)
这是一个适用于您的问题的非通用解决方案:
d = {
"name": "ABC",
"type": "Service",
"clusterRef": {
"clusterName": "ABCSTUFF"
},
"serviceState": "STARTED",
"healthChecks": [{
"name": "STORAGE",
"summary": "GOOD"
}, {
"name": "CPU UTILIZATION",
"summary": "GOOD"
}],
"maintenanceMode": "false"
}
########################
# Get Key Value
def get_key_values(d, key):
for k, v in d.items():
if k == "name":
k = (key + "." + v)
else:
k = (key + "." + k)
if isinstance(v, dict):
get_key_values(v, k)
elif isinstance(v, list):
for i in v:
tok1 = k + "." + i.get("name")
tok2 = i.get("summary")
print("{0} : {1}".format(tok1, tok2))
else:
print("{0} : {1}".format(k, v))
get_key_values(d, "TTS")