假设多重深度字典

{'definition': 'dirname',
 'get': ['getatime', 'getctime', 'getmtime', 'getsize'],
 'operation': ['join',
               {'split':['split', 'splitdrive', 'splitext']},
               {'expand': ['expanduser', 'expandvars']},
               ],
}


我尝试使用定义的函数提取其项目。

lst = []
def count_d(dt):
    global lst # global is unnecessary here
    if isinstance(dt, dict):
        for value in dt.values():
            if isinstance(value, str):
                lst.append(value)
            else:
                count_d(value)
    elif isinstance(dt,list):
        for ele in dt:
            if isinstance(ele, str):
                lst.append(ele)
            else:
                count_d(ele)
    return lst


过于复杂的递归函数解决了该问题。

Out[121]:
['dirname',
 'getatime',
 'getctime',
 'getmtime',
 'getsize',
 'join',
 'split',
 'splitdrive',
 'splitext',
 'expanduser',
 'expandvars']


我期望的是:

lst = []
def count_d(dt):
    global lst
    for ele in dt:
        if isinstance(ele,str):
            lst.append(ele)


或一行以上的抽象,而无需声明变量并使用global。

最佳答案

使用regex的方法

import re

j=[]
y1 = re.compile("(?<=')[^']+(?='[,|\]$])")
for value in y1.findall(str(dt)):
    j.append(value)
print(j)


输出量

['dirname', 'getatime', 'getctime', 'getmtime', 'getsize', 'join', 'split', 'splitdrive', 'splitext', 'expanduser', 'expandvars']

关于python - 从多深度字典中绘制元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46808615/

10-12 19:38