【问题标题】:Python replace nested dictionary in a dictionaryPython替换字典中的嵌套字典
【发布时间】:2023-01-23 18:35:53
【问题描述】:

我想替换字典中的字典,但是当我尝试时,我不断在添加的字典周围获取引号和斜线。

current_dict = {"header": {"from": "/app/off_grid_control/subscribe",
                               "messageId": "ef6b8e50620ac768569f1f7abc6507a5", "method": "SET",
                               "namespace": "Appliance.Control.ToggleX", "payloadVersion": 1,
                               "sign": "e48c24e510044d7e2d248c68ff2c10ca", "timestamp": 1601908439,
                               "triggerSrc": "Android"}, "payload": {"togglex": {"channel": 0, "onoff": 1}}}

raw_payload = {"togglex": {"channel": 0, "onoff": 1}}
payload = json.dumps(raw_payload)

从打印语句中我得到:

payload = {"togglex": {"channel": 0, "onoff": 0}}

所以看起来不错。

然后我尝试将新词典部分添加到原始词典中:

current_dict["payload"] = payload

得到这个:

current_dict = {"header": {"from": "/app/off_grid_control/subscribe",
                               "messageId": "ef6b8e50620ac768569f1f7abc6507a5", "method": "SET",
                               "namespace": "Appliance.Control.ToggleX", "payloadVersion": 1,
                               "sign": "e48c24e510044d7e2d248c68ff2c10ca", "timestamp": 1601908439,
                               "triggerSrc": "Android"}, "payload": "{\"togglex\": {\"channel\": 0, \"onoff\": 0}}"}

注意在负载值周围添加的所有 "\。 有人可以帮忙将不同的字典干净地添加到“有效负载”吗?

【问题讨论】:

  • 只需删除json.dumps。根本不需要对值进行编码
  • current_dict["payload"] = raw_payloadraw_payload 是字典。 payload 是 JSON 转储,它是一个字符串...

标签: python json dictionary


【解决方案1】:

当你这样做时:

payload = json.dumps(raw_payload)

你正在将你的字典转换成一个看起来像字典的 json 字符串。 如果你想将它作为 python 对象添加到外部字典,你需要这样做:

current_dict["payload"] = json.loads(payload)

【讨论】:

  • 为什么?已经有raw_payload...问题中不清楚为什么甚至dump
  • 我想它可能需要在其他地方作为字符串,而且这种澄清有助于理解为什么会发生这种事情。
  • 可能需要它。 load 只是 dumped 当你可以只使用原始数据时,它仍然看起来很奇怪......
  • 是的,我同意,但我认为提及这两个问题有助于更全面地理解问题,不仅可以使其发挥作用,还可以解释其工作原理。但你是对的,这个问题并不意味着需要倾销,所以谢谢你指出这一点。
最近更新 更多