ドット区切りの文字列のリストを変換しようとしています。
['one.two.three.four', 'one.six.seven.eight', 'five.nine.ten', 'twelve.zero']
ツリーに入れます (ネストされたリストまたは辞書 - 歩きやすいものなら何でも)。実際のデータには、たまたま長さの異なるドット区切りの部分が 1 ~ 4 個あり、合計で 2200 レコードあります。私の実際の目標は、最初の QComboBox が最初のセット項目 ['one', 'five', 'twelve'] (重複なし) で満たされるように、このデータで 4 つの QComboBox のセットを埋めることです。次に、選択した項目に応じて、2 番目の QComboBox に関連する項目が入力されます。別のネストされたレベルがある場合、'one' の場合は ['two', 'six'] のようになります。
これまでのところ、作業リスト -> ネストされた dicts ソリューションを取得しましたが、通常の dict() を使用しているため、非常に遅いです。そして、ComboBoxesを適切に埋めることが簡単にできるように、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)