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

标签 python list dictionary

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

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

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

最佳答案

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

首先,去除列表项中的所有空格,然后从 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/

相关文章:

css - 启动时在 bxslider 中隐藏 li 元素符号

html - 首页响应中心的图片映射

javascript - 我可以通过将其映射值设置为 null 来让 javascript 对象从内存中删除自身吗?

python - XSLT 与 Python 的 lxml : Forbidden Variable?

python - 如何将我的 python spyder 与 github 连接?

c++ - 从 C++ 中的列表中删除项目

python - 对数据帧字典中的每个数据帧进行排序

python - 为什么 Numpy Diag 函数的行为很奇怪?

python - 你能给我一个在 Django 中使用基于类的 View 的 Mixins 的例子吗?有什么用处?

python - 如何在元组列表上使用 reduce 函数?