也许不是最优雅的方式,但是这似乎工作:
首先,我们把名单列表到使用的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