如何用python将几个列表转换成树形结构?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用python将几个列表转换成树形结构?相关的知识,希望对你有一定的参考价值。
我把桌面文件的路径遍历了下来,形成了几个列表,每个列表是由文件的各级目录(字符串形式)组成的,现在我想把这些列表重新组合成树的形式,请问该怎么做呢
参考技术A不要费那个劲了,直接用pathlib
如何用python剥离元组列表?
【中文标题】如何用python剥离元组列表?【英文标题】:How to strip a list of tuple with python? 【发布时间】:2010-12-05 21:55:10 【问题描述】:对于每种情况,我都有一个带有一些标志的数组。 为了使用在 HTML 中打印数组并使用 colspan,我需要将其转换为:
['serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': True, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': True, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False, 'serve': False, 'open': False]
在此为打开标志:
['colspan': 12, 'open': False, 'colspan': 60, 'open': True, 'colspan': 24, 'open': False]
另一个生成发球。
如何使用 Python 以最聪明的方式做到这一点?
我可以一一数一数,但这似乎不是个好主意。
【问题讨论】:
您的问题还不清楚。此外,这些 colspan 值是 freaky 这个 colspan 值用于这个简单的例子。 colspan 值是具有相同标志的连续案例的数量。 【参考方案1】:def cluster(dicts, key):
current_value = None
current_span = 0
result = []
for d in dicts:
value = d[key]
if current_value is None:
current_value = value
elif current_value != value:
result.append('colspan': current_span, key: current_value)
current_value = value
current_span = 0
current_span += 1
result.append('colspan': current_span, key: current_value)
return result
by_open = cluster(data, 'open')
by_serve = cluster(data, 'serve')
第二个版本,灵感来自 Denis 的回答和他对 itertools.groupby
的使用:
import itertools
import operator
def make_spans(data, key):
groups = itertools.groupby(data, operator.itemgetter(key))
return ['colspan': len(list(items)), key: value for value, items in groups]
【讨论】:
colspan 每次都应该重新启动。这个函数给我 ['colspan': 12, 'open': False, 'colspan': 72, 'open': True, 'colspan': 96, 'open': False] 我的代码中缺少一行,我在几分钟前更正了 (current_span = 0
)。它现在应该可以按预期工作。请原谅我的问题,但你知道如何编程,对吧?我的意思是,代码只是让您入门的示例,而不是生产就绪代码。如果您了解代码在做什么,那么发现您描述的错误应该很容易!
是的,我自己也修好了 :)【参考方案2】:
这个不清楚你需要什么,但希望下面的例子对你有所帮助:
>>> groupped = itertools.groupby(your_list, operator.itemgetter('open'))
>>> ['colspan': len(list(group)), 'open': open for open, group in groupped]
['colspan': 12, 'open': False, 'colspan': 60, 'open': True, 'colspan': 78, 'open': False]
>>> groupped = itertools.groupby(your_list)
>>> [dict(d, colspan=len(list(group))) for d, group in groupped]
['serve': False, 'open': False, 'colspan': 12, 'serve': True, 'open': True, 'colspan': 52, 'serve': False, 'open': True, 'colspan': 8, 'serve': False, 'open': False, 'colspan': 78]
【讨论】:
不知道为什么最后一个colspan没有预期值。 好吧,我知道……我的示例得到了 150 个案例而不是 96 个……当您知道如何使用 Python 时,它是如此强大。谢谢。 +1 包括电池!使用itertools.groupby
是要走的路!
如果我想保留一个我知道对所有组相同的信息,我该怎么办?例如:['colspan': 12, 'open': False, 'colspan': 60, 'open': True, 'schedule_id':1, 'colspan': 78, 'open': False ]以上是关于如何用python将几个列表转换成树形结构?的主要内容,如果未能解决你的问题,请参考以下文章
如何用js实现select下拉框里是树形结构,可复选,select框中传复选所有值?如下图所示。
JavaScript实现扁平数组结构与JSON树形结构相互转换递归reducecontinuepushconcatfor of