gpt4 book ai didi

python - 根据列表中的项目将平面列表转换为嵌套字典

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:24 25 4
gpt4 key购买 nike

例如,我有一个这样的平面列表:

[' a',
' aa1',
' aaa1',
' aaa2',
' aaa3',
' aaa4',
' aaa5',
' aa2',
' aaa6',
' aaa7',
' aaa8',
' aaa9',
' aaa10',
' b',
' bb1',
' bbb1',
' bbb2',
' bbb3',
' bb2',
' bbb4',
' bbb5',
' bbb6',
' bb3',
' bbb7',
' bbb8',
' bbb9',
' bbb10']

我需要像这样转换成嵌套字典:

{'a': {'aa1': ['aaa1', 'aaa2', 'aaa3', 'aaa4', 'aaa5'],
'aa2': ['aaa6', 'aaa7', 'aaa8', 'aaa9', 'aaa10']},
'b': {'bb1': ['bbb1', 'bbb2', 'bbb3'],
'bb2': ['bbb4', 'bbb5', 'bbb6'],
'bb3': ['bbb7', 'bbb8', 'bbb9', 'bbb10']}}

列表中的每一项都包含空格,只有一个空格的项被指定为嵌套字典的顶部键,具有两个空格的项被指定为前一项的二级键,然后是三个空格项目是前一个键的所有值。

最佳答案

我认为空格只会让列表变得尴尬,您不一定需要它们来实现您想要的。

首先,去除列表项中的所有空格,然后从collections.defaultdict开始构建字典。 . re.sub 执行您打算对空格执行的操作的逻辑。应用于清除所有数字,替换后的字符串长度现在可用于确定其在字典中的位置:

import re
from pprint import pprint
from collections import defaultdict

# remove all spaces from list items
lst = map(str.strip, lst)

d = defaultdict(lambda: defaultdict(list))

for i in lst:
j = re.sub('\d+', '', i)
if len(j) == 1:
k1 = i
elif len(j) == 2:
k2 = i
else:
d[k1][k2].append(i)

pprint(d)
#{'a': {'aa1': ['aaa1', 'aaa2', 'aaa3', 'aaa4', 'aaa5'],
# 'aa2': ['aaa6', 'aaa7', 'aaa8', 'aaa9', 'aaa10']},
# 'b': {'bb1': ['bbb1', 'bbb2', 'bbb3'],
# 'bb2': ['bbb4', 'bbb5', 'bbb6'],
# 'bb3': ['bbb7', 'bbb8', 'bbb9', 'bbb10']}}

关于python - 根据列表中的项目将平面列表转换为嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39318366/

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