给定下面的列表,使用Python 3如何生成一个嵌套字典,其中list[0]包含list[1:]作为嵌套子项。
list = [
["Layer 1.A", "Layer 1.B"],
["layer 2.A", "Layer 2.B"],
["Layer 3"],
["Layer 4"]
]
我已经尝试了许多方法,但没有一个能给我正确的输出。我已经尝试了以下方法:
1.尝试使用python的产品(生成所有排列,但未给予正确的输出。它看起来像:
[
["Layer 1.A", "Layer 2.A", "Layer 3", "Layer 4"],
["Layer 1.A", "Layer 2.B", "Layer 3", "Layer 4"],
["Layer 1.B", "Layer 2.A", "Layer 3", "Layer 4"],
["Layer 1.B", "Layer 2.B", "Layer 3", "Layer 4"]
]
1.尝试使用嵌套for循环创建嵌套字典(无法确定如何追加到字典)
1.已尝试使用递归(尝试通过每个字符串的每个元素迭代dict(zip(keys, dictionary) for keys in product(*dictionary2))
、dict或zip)
1.尝试使用lambda函数
预期输出:请注意,只有第一层发生了变化,而内部结构是相同的。
[
{"Layer 1.A":
{
"Layer 2.A":
{
"Layer 3" : "Layer 4"
},
"Layer 2.B":
{
"Layer 3" : "Layer 4"
}
}
},
{"Layer 1.B":
{
"Layer 2.A":
{
"Layer 3" : "Layer 4"
},
"Layer 2.B":
{
"Layer 3" : "Layer 4"
}
}
}
]
2条答案
按热度按时间dnph8jn41#
你已经生成了所有的排列。现在从这些排列中创建你的嵌套字典。为此,我们可以定义一个函数,它将接受原始字典、键列表和要在该嵌套键处设置的值。如果键不存在,则创建该键并将其值设置为新字典
例如,对空的
my_dict = dict()
执行nested_set(my_dict, ['a', 'b', 'c'], 'd')
,结果如下:知道了这一点,你就可以这样使用你的排列列表:
这几乎可以得到你想要的结果:
将其转换为所需列表很容易:
其给出:
j2qf4p5b2#
这似乎是递归解决方案的一个自然问题。
这个实现将返回一个具有您正在寻找的嵌套结构的列表。我真的不太了解如何将结果格式化为JSON。