0

文字列である ID ごとに ID と複数の値を持つ辞書があります。各 Id の各値について、データベースクエリを作成し、設定された結果を取得します。

{111: Run, Jump, swim}
{222: Eat, drink}

したがって、各値に対して実行すると、クエリを実行すると別のデータセットが返され、そのセットの各値を選択してクエリを実行すると、別のセットが返され、最終的にアイテムが1つしか返されないポイントに到達します。のすべてのサブ要素の最後の要素を取得したら、Run次に移動しJumpて続行します。

以前にこの質問をしましたが、結果が得られなかったので、コードを削除してもう一度質問するように言われました。これは、私が数日前に尋ねた同じ質問へのリンクです。disjoin set のようなものを実装する必要がありますか?

4

2 に答える 2

2

カテゴリ/サブカテゴリは、各ノードに N 個の分岐があるツリーとして見ることができます (カテゴリの数によって異なります)。私が収集できることから、基本的には木の葉の順序付きリストを生成したいと考えています。

それを行う簡単な方法の1つは、ジェネレーターを使用することです(元の質問の用語を使用):

def lookup(elem):
    # do your SQL call here for a given category 'elem' and return
    # a list of it's subcategories
    return []

def leaves(lst):
    if lst:
        for elem in lst:                          # for every category
            for sublist in leaves(lookup(elem)):  # enumerate it's sub categories
                yield sublist                     # and return it
            yield elem                            # once lookup(elem) is [] return elem

d = { 111: [Run, Jump, swim] , 222: [Eat, drink] }

for key, lst in d.items():
    print key, [elem for elem in leaves(lst)]

ジェネレーターに慣れていない場合、ジェネレーターは、値を返すのではなく値を "生成" する単純なイテレーター構造です。違いは、yield はその場所でのみイテレータを一時停止し、次の値が要求されたときに停止した場所から続行することです。

ジェネレーター内で巧妙な再帰を使用すると、ツリー全体を簡単に解析できます。

はリスト内包表記であり、によって反復されるすべての要素[elem for elem in leaves(lst)]を含むリストを単純に構築します。elemleaves

于 2011-11-09T05:02:27.927 に答える
0

これは、単純なツリー トラバーサルのように見えます。BFSまたはDFSを使用できます。

于 2011-11-09T04:57:51.240 に答える