如何使用Python中嵌套的dict从dict创建新的dict
我从一个api收到的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,其
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?非常感谢您的帮助,非常感谢!!!!注意,您不必使用递归;我只是觉得为它编写递归函数更容易。您也可以使用堆栈和循环。