我有一个文件系统的 dict 表示,它看起来像这样。
{
"en": {
'file_name_1': [{meta representation of file_name_1}] or False,
{'folder_name': {
'index': [{meta repr. of the index}] or False
'sub_file_1': [{meta repr. of file_name_1}] or False,
}
}
}
"fr": {
<...>
}
'tree_root': path to the tree's parent node
}
给定这棵树(文件或文件夹)中一个叶子的路径,我想将通向该叶子的树表示为 HTML 嵌套列表。
我不相信我的树会变得很深,但为了快,我正在考虑只跑一次穿过树叶的路径。
这是我现在所拥有的:(self.tree
是我的字典,leaf_path
我的,嗯。叶子路径。为简单起见,我尝试并清理了我的代码)
rel_URI = [key for key in leaf_path.split(os.sep)]
stack = []
html = u'<ul>'
for key in rel_URI:
stack.append(key)
obj = reduce(dict.get, stack, self.tree)
if isinstance(obj, dict): # a subdir
html += u'<ul>'
for _dir in obj.iterkeys() if isinstance(_dir, dict):
if _dir == rel_URI[len(stack)]: # in the leaf_path
html += u'<li class="folder">%s</li>' % self.getTitle(obj, _dir)
else: # not in the leaf_path
html += u'<li class="folder, far">%s</li>'% self.getTitle(obj,_dir)
for _file in obj.iterkeys() if isinstance(_file, list):
html += u'<li class="file, far">%s</li>'% obj[0]['title']
html += u'</ul>'
else: # the leaf file
item = u'<li class="file">%s</li>' % obj[0]['title']
html += '</ul>'
我很难弄清楚如何将下一个子树嵌套到迭代中:我已经完全断开了下一步与这一步的连接,因此我最终得到了一个混乱的嵌套文件列表。
- 我的部分麻烦是字典没有排序
您将如何构建列表?