如何在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-*-*': 
        {}}}