也許不是最優雅的方式,但是這似乎工作:
首先,我們把名單列表到使用的defaultdicts
defaultdicts
一個defaultdict
一本字典,又名infinitedict
myList = [['ItemB','ItemZ'],['ItemB','ItemP'],['ItemB','ItemJ','Item6'],['ItemB','ItemJ','Item5']]
from collections import defaultdict
infinitedict = lambda: defaultdict(infinitedict)
dictionary = infinitedict()
for item in myList:
d = dictionary
for i in item:
d = d[i]
現在,我們可以使用遞歸函數將字典重新轉換爲樹狀列表:
def to_list(d):
lst = []
for i in d:
lst.append(i)
if d[i]:
lst.append(to_list(d[i]))
return lst
輸出是從您的預期輸出有點不同,但這似乎更有意義,對我說:
>>> print to_list(dictionary)
['ItemB', ['ItemZ', 'ItemJ', ['Item6', 'Item5'], 'ItemP']]
或者,更貼近您預期的結果(但還不是完全一樣的,順序是炒起來
def to_list(d):
return [[i] + [to_list(d[i])] if d[i] else i for i in d]
輸出:
>>> print to_list(dictionary)[0]
['ItemB', ['ItemZ', ['ItemJ', ['Item6', 'Item5']], 'ItemP']]
請隨時分享你的*我能得到接近使用遞歸函數* –
兩列看起來相同,我的眼睛。我錯過了什麼? –
這是你想要的字典,朋友。 – 2rs2ts