假设多重深度字典
{'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/