【发布时间】:2013-05-08 23:56:27
【问题描述】:
我正在尝试转换以点分隔的字符串列表,例如
['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
进入一棵树(嵌套列表或字典 - 任何易于遍历的内容)。 真实数据恰好有 1 到 4 个不同长度的点分隔部分,总共有 2200 条记录。 我的实际目标是用这些数据填充 4 个 QComboBox 的集合,以使第一个 QComboBox 填充第一个设置项 ['one'、'five'、'twelve'](没有重复项)。然后根据所选项目,第二个 QComboBox 将填充其相关项目:对于“一个”,它将是:[“二”,“六”],依此类推,如果还有另一个嵌套级别。
到目前为止,我有一个工作列表 -> 嵌套的 dicts 解决方案,但它非常慢,因为我使用常规的 dict()。而且我似乎很难将其重新设计为默认字典,以便轻松正确地填充 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)
【问题讨论】:
标签: python dictionary pyside defaultdict