我正在尝试转换点分隔字符串的列表,例如
['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
进入一棵树(嵌套列表或字典 - 任何易于遍历的东西)。
真实数据恰好有1到4个不同长度的点分隔部分,总共有2200条记录。
我的实际目标是用这些数据填充 4 个 QComboBox 的集合,第一个 QComboBox 填充第一组项目 [“一”、“五”、“十二”](无重复)。然后,根据所选项目,第二个 QComboBox 会填充其相关项目:对于“一”,它将是:[“二”、“六”],依此类推(如果存在另一个嵌套级别)。
到目前为止,我已经有了一个工作列表 -> 嵌套字典解决方案,但它非常慢,因为我使用常规 dict()。我似乎很难将其重新设计为默认字典,以便轻松地正确填充组合框。
我当前的代码:
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)
ls = ['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
tree = {}
for item in ls:
t = tree
for part in item.split('.'):
t = t.setdefault(part, {})
Result:
{
"twelve": {
"zero": {}
},
"five": {
"nine": {
"ten": {}
}
},
"one": {
"six": {
"seven": {
"eight": {}
}
},
"two": {
"three": {
"four": {}
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)