我试图转换点分隔字符串列表,例如
['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
Run Code Online (Sandbox Code Playgroud)
到树(嵌套列表或dicts - 易于穿过的任何东西).实际数据恰好有1到4个不同长度的点分离部分,总共有2200个记录.我的实际目标是用这些数据填充4个QComboBox'的集合,方式是第一个QComboBox填充第一个设置项['one','five','12'](没有重复).然后根据所选项目,第二个QComboBox将填充其相关项:对于'one',它将是:['two','six'],依此类推,如果有另一个嵌套级别.
到目前为止,我有一个工作列表 - >嵌套dicts解决方案,但它非常慢,因为我使用常规dict().我似乎很难将其重新设计为defaultdict,以便轻松地正确填充ComboBox.
我目前的代码:
def list2tree(m):
tmp = {}
for i in range(len(m)):
if m.count('.') == 0:
return m
a = m.split('.', 1)
try:
tmp[a[0]].append(list2tree(a[1]))
except (KeyError, AttributeError):
tmp[a[0]] = list2tree(a[1])
return tmp
main_dict = {}
i = 0
for m in methods:
main_dict = list2tree(m)
i += 1
if (i % 100) == 0: print i, len(methods)
print main_dict, i, len(methods)
Run Code Online (Sandbox Code Playgroud)