Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python中嵌套的dict从dict创建新的dict_Python_Python 2.7_Dictionary - Fatal编程技术网

如何使用Python中嵌套的dict从dict创建新的dict

如何使用Python中嵌套的dict从dict创建新的dict,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我从一个api收到的dict开始 start_dict = { "a": 795, "b": 1337, "c": [ { "d1": 2, "d2": [ { "e1": 4 } ] } ] } 我需要从该dict中创建一个单独的dict,其

我从一个api收到的dict开始

start_dict = { 
    "a": 795, 
    "b": 1337, 
    "c": [
        {
            "d1": 2,
            "d2": [
                 {
                      "e1": 4
                 }
        ]
        }
    ]
    }
我需要从该dict中创建一个单独的dict,其中每个键和值都由它们的键和值分隔到自己的dict中,同时保持嵌套dict的完整性

values =
{
"fields": [
  {
    "element_name": "a",
    "value": 795
  },
  {
    "element_name": "b",
    "value": 1337
  },
  { 
    "element_name": "c",
    "value": [
            {
                 "element_name": "d1",
                 "value": 2
            },
            {
                 "element_name": "d2",
                 "value" : [
                          {
                               "element_name": "e1",
                               "value": 4
                          }
                      ]
            ]
       }
    ]
  }

实际的dict相当大,但在原始dict中没有超过一个或两个深嵌套dict,而是有许多单嵌套dict。这是api接受新数据的唯一方式,所以在我弄明白之前我有点卡住了。非常感谢您的帮助,因为我对Python(3周)很陌生,所以如果这是一件简单的事情,请不要太苛刻。

您可以使用递归函数构建输出:

def transform(ob):
    if isinstance(ob, list):
        return [transform(v) for v in ob]
    elif not isinstance(ob, dict):
        return ob
    return [{'element_name': k, 'value': transform(v)}
            for k, v in ob.items()]

values = {'fields': transform(start_dict)}
因此,每个
键,值
对都被转换为列表中的
{'element_name':key,'value':value}
字典,其中任何本身是列表或字典的值都通过递归调用进行转换

演示:


您可以使用递归函数生成输出:

def transform(ob):
    if isinstance(ob, list):
        return [transform(v) for v in ob]
    elif not isinstance(ob, dict):
        return ob
    return [{'element_name': k, 'value': transform(v)}
            for k, v in ob.items()]

values = {'fields': transform(start_dict)}
因此,每个
键,值
对都被转换为列表中的
{'element_name':key,'value':value}
字典,其中任何本身是列表或字典的值都通过递归调用进行转换

演示:


你有没有试着自己写点什么?在问题中加入一些代码…你的
c
值有点神秘。该列表中有一个包含单个词典的列表,但结果输出是一个列表,其中的键值对从该词典转换为单独的词典。如果
c
列表中有多个元素,该怎么办?如果包含更多的列表,或者对象不是字典,该怎么办?这同样适用于
d2
。我下面的解决方案产生了一个嵌套列表,因为单个字典被转换为键值字典列表。如果有多个字典,这意味着每一个字典都成为主
c
列表中的一个单独列表。任何其他对象类型也可以通过这种方式正确处理。您是否尝试自己编写一些东西?在问题中加入一些代码…你的
c
值有点神秘。该列表中有一个包含单个词典的列表,但结果输出是一个列表,其中的键值对从该词典转换为单独的词典。如果
c
列表中有多个元素,该怎么办?如果包含更多的列表,或者对象不是字典,该怎么办?这同样适用于
d2
。我下面的解决方案产生了一个嵌套列表,因为单个字典被转换为键值字典列表。如果有多个字典,这意味着每一个字典都成为主
c
列表中的一个单独列表。任何其他对象类型也可以通过这种方式正确处理。因此,当使用嵌套的dict时,您需要一个递归函数,以便当遇到嵌套的dict时,它可以循环回函数并继续使用dict中的dict?非常感谢您的帮助,非常感谢!!!!注意,您不必使用递归;我只是觉得为它编写递归函数更容易。您也可以使用堆栈和循环。因此,当使用嵌套的dict时,您需要一个递归函数,以便当遇到嵌套的dict时,它可以循环回函数并继续使用dict中的dict?非常感谢您的帮助,非常感谢!!!!注意,您不必使用递归;我只是觉得为它编写递归函数更容易。您也可以使用堆栈和循环。