Python中如何将列表转为嵌套字典并添加指定值?
修正列表转嵌套字典的代码,添加指定值
你的代码问题在于循环里给每个列表元素都创建了空字典,包括最后一个元素,所以最终的嵌套字典里没有把指定的value赋值进去。我们只需要对列表的前n-1个元素创建嵌套字典,最后一个元素直接关联到目标值即可。
方法一:拆分列表处理
lst = [1, 2, 3, 3, 4] # 别用list当变量名,这是Python内置类型 value = 5 new_dict = current = {} # 遍历列表除最后一个元素的部分 for number in lst[:-1]: current[number] = {} current = current[number] # 给最后一个元素设置目标值 current[lst[-1]] = value
运行后得到的结果:
{1: {2: {3: {3: {4: 5}}}}}
(注:你给出的期望结果里输入列表是[1,2,3,3,4]但期望是{1:{2:{3:{4:5}}}},这里应该是输入笔误,实际按输入列表运行会保留两个3的嵌套结构)
方法二:用enumerate判断元素位置
如果不想拆分列表,可以用enumerate获取元素的索引,判断是否是最后一个元素:
lst = [1, 2, 3, 3, 4] value = 5 new_dict = current = {} for idx, number in enumerate(lst): if idx == len(lst) - 1: current[number] = value else: current[number] = {} current = current[number]
这种写法更灵活,适合不确定列表长度的场景。
方法三:递归实现(可选)
如果偏好递归写法,也可以这样实现:
def list_to_nested_dict(lst, value): if len(lst) == 1: return {lst[0]: value} return {lst[0]: list_to_nested_dict(lst[1:], value)} lst = [1, 2, 3, 3, 4] value = 5 new_dict = list_to_nested_dict(lst, value)
运行结果和前两种方法完全一致。
另外提醒:不要用list和dict作为变量名,这会覆盖Python的内置类型,可能导致后续代码出现意外错误。
内容的提问来源于stack exchange,提问作者Andree098766
相关产品推荐
相关产品推荐

