用于将嵌套列表转换为嵌套字典的递归函数

RichMC

我有一个列表列表,我想要一个字典词典:

import json

list = [
        ['1', '2', '3'],
        ['a', 'b'],
        ['I', 'II'],
        ['A', 'B', 'C'],
        ['A', 'B', 'D']
    ]

dict = {}  
    
for val in list:
    count = len(val)
    if val[0] not in dict:
        dict[val[0]] = {}
    if count == 3:
        if val[1] not in dict[val[0]]:
            dict[val[0]][val[1]] = {}
        if val[2] not in dict[val[0]][val[1]]:
            dict[val[0]][val[1]][val[2]] = ''
    else:
        if val[1] not in dict[val[0]]:
            dict[val[0]][val[1]] = ''
            
print (json.dumps(dict, sort_keys=True, indent=4))

输出:

{
    "1": {
        "2": {
            "3": ""
        }
    },
    "A": {
        "B": {
            "C": "",
            "D": ""
        }
    },
    "I": {
        "II": ""
    },
    "a": {
        "b": ""
    }
}

因此,它可以与列表中的2或3个元素一起使用,但是如果我有更多(随机)列表元素,则必须具有某种我无法想到的递归函数。

富美男

此处实际上不需要递归函数(除非有此要求)。您也不需要关心列表的大小或数量。只需遍历每个列表,同时保留有关内部字典的最新参考。

您也可以使用它setdefault来避免检查密钥是否已经存在。

d = {}
for sub in l:
    inner = d
    for elem in sub[:-1]:
        inner = inner.setdefault(elem, {})
        
    inner[sub[-1]] = ""

如果由于某种原因您确实希望将此作为递归函数,则以下为等效版本。它从一个基本的dict开始,并且每次调用都会创建一个内部dict,下一个调用会降到该dict的一个级别上并传递列表的其余部分。基本情况是列表包含一个元素时,使用字符串而不是字典。再次,为简单起见,setdefault使用:

def create_dict(l, d):
    if len(l) == 1:
        d[l[0]] = ""
    else:
        d = d.setdefault(l[0], {})
        create_dict(l[1:], d)

d = {}
for sub in l:
    create_dict(sub, d)

尽量避免对变量使用内置名称。双方listdict表示各个类的构造函数不属于任何在你的程序更可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将列表转换为嵌套字典?

来自分类Dev

将嵌套字典转换为元组列表

来自分类Dev

将嵌套列表转换为字典

来自分类Dev

将嵌套字典转换为元组列表

来自分类Dev

将嵌套字典列表转换为平面字典列表

来自分类Dev

将字典列表转换为 2 个深度的嵌套字典

来自分类Dev

将任意嵌套的字典转换为列表列表

来自分类Dev

Python将嵌套元组列表转换为字典

来自分类Dev

将嵌套字典列表转换为Pandas DataFrame

来自分类Dev

如何将列表转换为嵌套字典?

来自分类Dev

使用自己生成的键将嵌套列表转换为字典

来自分类Dev

如何将嵌套列表转换为字典

来自分类Dev

将 Pandas DataFrame 中的嵌套字典转换为列表示

来自分类Dev

将嵌套循环转换为递归

来自分类Dev

将Pandas DataFrame转换为嵌套字典

来自分类Dev

将嵌套字典转换为IReadOnlyDictionary

来自分类Dev

将嵌套字典的键转换为大写

来自分类Dev

将嵌套字典转换为元组python

来自分类Dev

将嵌套字典转换为Python对象

来自分类Dev

将 JSON 数据转换为嵌套字典

来自分类Dev

将数据框转换为嵌套字典

来自分类Dev

将两个列表转换为动态嵌套字典,然后转换为 JSON

来自分类Dev

将嵌套列表转换成字典

来自分类Dev

如何将字典列表转换为类似于嵌套字典的树?

来自分类Dev

将嵌套列表<X>转换为嵌套列表<Y>

来自分类Dev

将平面对象列表转换为C#中的嵌套对象列表(递归?)

来自分类Dev

将Pandas DataFrames列表转换为具有值作为列表的嵌套字典

来自分类Dev

如何将包含嵌套列表的字典列表转换为pandas df

来自分类Dev

将嵌套列表转换为数据框