如何在python中对列表进行分组?
这里我得到了一个字符串列表:如何在python中对列表进行分组?,python,list,tree,Python,List,Tree,这里我得到了一个字符串列表: ['2-3-1-*-*','2-3-*-*-*','2-1-*-*-*','1-4-3-*-*','2-3-2-*-*','2-1-3-*-*','1-1-*-*-*','2-3-1-1-*']; 我试图将此字符串分组为如下结构: --'2-3-*-*-*' --'2-3-1-*-*' --'2-3-1-1-*' --'2-3-2-*-*' --'2-1-*-*-*' --'2-1-3-*-*' --'1-4-3-*-*' --'1
['2-3-1-*-*','2-3-*-*-*','2-1-*-*-*','1-4-3-*-*','2-3-2-*-*','2-1-3-*-*','1-1-*-*-*','2-3-1-1-*'];
我试图将此字符串分组为如下结构:
--'2-3-*-*-*'
--'2-3-1-*-*'
--'2-3-1-1-*'
--'2-3-2-*-*'
--'2-1-*-*-*'
--'2-1-3-*-*'
--'1-4-3-*-*'
--'1-1-*-*-*'
这就像树的结构。我是编程新手,有人能告诉我如何构造树状结构和我可以使用的任何合适的结构吗?如果您使用某个js库来呈现它,请将它保存为嵌套的
dict
,以便可以轻松地导出为JSON
def parser(items):
nested_dicts = {}
for item in items:
nodes = item.split('-')
current_dict = nested_dicts
for n in nodes[:-1]:
current_dict = current_dict.setdefault(n, {})
last = nodes[-1]
current_dict[last] = current_dict.get(last, 0) + 1
return nested_dicts
提供数据的样本输出:
{
"1": {
"1": {
"*": {
"*": {
"*": 1
}
}
},
"4": {
"3": {
"*": {
"*": 1
}
}
}
},
"2": {
"1": {
"3": {
"*": {
"*": 1
}
},
"*": {
"*": {
"*": 1
}
}
},
"3": {
"1": {
"1": {
"*": 1
},
"*": {
"*": 1
}
},
"2": {
"*": {
"*": 1
}
},
"*": {
"*": {
"*": 1
}
}
}
}
}
输出:
结构是指打印列表时的可视化格式吗?您可以尝试使用
pprint.pprint(lst)
谢谢您的回复。实际上,我正在使用d3.js创建可视化部分。我打算通过任何合适的结构来创建一个多维json文件来表示这一点。没有必要创建一个能够容纳这一点的结构,我的问题是,如果我想直接将此列表写入json文件,我不确定如何写入该文件,因为它应该表示这种树结构。我不确定我是否完全理解了自己。对不起,我的英语不好。如果你用Python创建了一个树状结构,你可以轻松地将它导出为JSON。请参阅导入json谢谢,这非常有用。虽然这不是我想要的,但它离我很近。这对我来说是一个很好的暗示。我将继续对此进行修改。稍后我会就这个问题发表我自己的答案。非常感谢。非常感谢。这对我很有帮助。这是一个关于如何对列表进行进一步分组的好例子,我可能会在未来的阶段中实现。非常感谢!:)
s = ['2-3-1-*-*','2-3-*-*-*','2-1-*-*-*','1-4-3-*-*','2-3-2-*-*','2-1-3-*-*','1-1-*-*-*','2-3-1-1-*']
def isSubElement(subelement, element):
return (subelement != element) and all([(e1 == e2) or (e1 == "*" and e2 != "*") for e1, e2 in zip(element.split('-'), subelement.split('-'))])
def parseTree(elementList):
if len(elementList) == 0:
return {}
elements = elementList[:]
d = {}
for element1 in elements:
parent = True
for element2 in elements:
if isSubElement(element1, element2):
parent = False
break
if parent:
d[element1] = {}
for element1 in d.keys():
d[element1] = parseTree([element for element in elements if isSubElement(element, element1)])
return d
print parseTree(s)
{'2-1-*-*-*':
{'2-1-3-*-*':
{}},
'1-4-3-*-*':
{},
'1-1-*-*-*':
{},
'2-3-*-*-*':
{'2-3-1-*-*':
{'2-3-1-1-*':
{}},
'2-3-2-*-*':
{}}}