0

ここで文字列のリストを取得しました:

['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-*-*-*'

これはツリー構造のようなものです。私はプログラミングの初心者なので、ツリーのような構造と使用できる適切な構造を構築する方法についてヒントを教えてもらえますか?

4

2 に答える 2

1
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-*-*': 
        {}}}
于 2013-10-21T03:21:33.737 に答える
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
        }
      }
    }
  }
}
于 2013-10-21T03:15:28.550 に答える