gpt4 book ai didi

python - 将嵌套列表转换为嵌套字典的递归函数

转载 作者:行者123 更新时间:2023-12-04 00:51:26 27 4
gpt4 key购买 nike

我有一个列表的列表,我想得到一个字典的字典:

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以避免检查 key 是否已经存在。

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

inner[sub[-1]] = ""

如果出于某种原因你真的想把它作为一个递归函数,那么下面是一个等价的版本。它从一个基本字典开始,每次调用都会创建一个内部字典,下一个调用会沿着字典的一个级别向下传递并传递列表的其余部分。基本情况是列表只有一个元素,因此使用字符串而不是字典。同样,为简单起见,使用了 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 都代表各自类的构造函数,它们在您的程序中不再可用。

关于python - 将嵌套列表转换为嵌套字典的递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66204267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com