【问题标题】:python json, replacing values with key and value pairspython json,用键和值对替换值
【发布时间】:2016-08-24 18:53:44
【问题描述】:

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

以下是我的代码

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

非常感谢任何帮助

【问题讨论】:

  • 您是否能够重组数据,或者您是否必须使用该确切格式的数据?
  • 不,无法重组数据,因为它是从外部 API 获取的
  • 您是否尝试过使用json 库并修改您通过加载json 获得的字典?

标签: python json


【解决方案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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2018-04-19
    • 2020-03-14
    • 2021-12-11
    相关资源
    最近更新 更多