修改嵌套字典中的键以匹配帖子

时间:2017-08-08 14:35:32

标签: python api dictionary nested

所以我对系统A运行GET并获得此输出:

'{
  "comment": "A good object",
  "number": "1.1",
  "extra_stuff": {
        "extra_id": {"value": 100},
        "extra_name": {"value": "Test"},
        }
 }'

在我发布到系统B之前,我需要翻译(并省略)某些键(但保留值)。我想从这个GET和翻译只需要嵌套的字典键(extra_stuff中的键),只有其中一个。

翻译:

mapping_dict = { 'extra_id': 'id' }
dict_to_post = { '#KEY extra_ID': #VALUE FROM extra_ID# :, 'name' : Test, 'other' : True }

我有一个从另一个问题翻译字典键的功能:

def update_dict_keys(obj, mapping_dict):
    if isinstance(obj, dict):
        return {mapping_dict[k]: update_dict_keys(v, mapping_dict) for k, v in obj.iteritems()}
    else:

        return obj

但我不确定如何只将嵌套字典发送到该函数中,我似乎只把“主”字典放在那里。不确定最好的方法是什么。我还需要处理来自“主要”字典的信息以及另一篇文章。

2 个答案:

答案 0 :(得分:0)

您确定,后面有{"value": "Test"},因为这不是有效的json而您的获得回复看起来像json

如果这只是你帖子中的错误,你可以 使用json.loads()从响应字符串中获取字典:

import json

res = '{
    "comment": "A good object",
    "number": "1.1",
    "extra_stuff": {
            "extra_id": {"value": 100},
            "extra_name": {"value": "Test"}
    }
}'

# convert to dict
res_dict = json.loads(res)

# do your mapping
dict_to_post = { 'extra_id': res_dict['extra_stuff']['extra_id']['value']}

# dict_to_post is {'extra_id': 100} now

此外,我不了解您需要的mapping_dict。您想要{' id':100}作为结果吗?

答案 1 :(得分:0)

所以我发现我得到的反应已经被解码了!我遇到的问题是解码后的响应是一个字典中带有字典的列表。