基于lis中的项将平面列表转换为嵌套词典

2024-06-16 10:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有这样一个简单的列表:

[' 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']

我需要转换成这样的嵌套词典:

^{pr2}$

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


Tags: 列表空格bb1aa2aa1aaa1aaa2aaa3
1条回答
网友
1楼 · 发布于 2024-06-16 10:20:30

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

首先,strip列表项中的所有空格,然后从^{}开始构建字典。处理这些空格的逻辑是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']}}

相关问题 更多 >