pythonjson,用键和值对替换值

2024-06-26 14:06:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的示例中,我试图用另一个键的值替换一个键的值;但我尝试了多种方法,但似乎都不起作用。在

下面是我的代码

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

非常感谢任何帮助


Tags: keynameforgettypeservicestoragecpu
1条回答
网友
1楼 · 发布于 2024-06-26 14:06:55

以下是一个适用于您的问题的非通用解决方案:

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")

相关问题 更多 >