我想转换点分隔的字符串列表,如
['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
成树(嵌套的列表或类型的字典 - 什么,很容易走过)。 真实数据碰巧具有不同长度的1至4个点分隔的部分,并且具有2200个的记录的总额。 我的实际目标是填补该组4个QComboBox'es与此数据,在以使第一QComboBox填充有第一组项[“一个”,“5”,“12”](无重复)。 然后根据选择的项目,第二QComboBox充满了它的相关项目:为“一”这将是:“两节”,“六”],等等,如果有另一个嵌套级别。
到目前为止,我已经有了一个工作列表 - >嵌套类型的字典解决方案,但它是可怕的慢,因为我经常使用的dict()。 我似乎有麻烦,它重新设计的defaultdict的方式方便地制定出适当填充组合框。
我当前的代码:
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)