0

ツリーのような入力データ形式があります。リストのリストのリストが含まれています。入力は次のようになります

in_put = [[['shop_id', '=', 1]],
           [['shop_id', '=', 1],['product_id', '=', 16]],
           [['shop_id', '=', 1],['product_id', '=', 8]],
           [['shop_id', '=', 1],['product_id', '=', 4]],
           [['shop_id', '=', 1],['product_id', '=', 6]],
           [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1]],
           [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1]],
           [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1]],
           [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1]],
           [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2]],
           [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2]],
           [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2]],
           [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2]],
           [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2],['state', '=', u'draft']],
           [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2],['state', '=', u'draft']],
           ]

そして、データを以下の形式で整理したかったのです。

output = [   
    [['shop_id', '=', 1]],
    [['shop_id', '=', 1],['product_id', '=', 16]],
    [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1]],
    [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2]],
    [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 1],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 16],['so', '=', 2],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 8]],
    [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1]],
    [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2]],
    [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 1],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 8],['so', '=', 2],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 4]],
    [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1]],
    [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2]],
    [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 1],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 4],['so', '=', 2],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 6]],
    [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1]],
    [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2]],
    [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 1],['state', '=', u'draft']],
    [['shop_id', '=', 1],['product_id', '=', 6],['so', '=', 2],['state', '=', u'draft']],
]

どうすればそのようなデータ配置を実現できますか.Pythonで利用できる短い方法はありますか?

4

2 に答える 2

4

使用する必要がありますsorted

sorted(in_put, key=lambda x: (
                    x[0][2],
                    {16:1,8:2,4:3,6:4}[x[1][2]] if len(x)>1 else None,
                    x[3][2] if len(x)>3 else None,
                    x[2][2] if len(x)>2 else None
                    ))

product_id を 16/8/6/4 としてソートする必要がある場合 (例の順序ではありません)、次を使用できます。

sorted(in_put, key=lambda x: (
                    x[0][2],
                    1.0/x[1][2] if len(x)>1 else None,
                    x[3][2] if len(x)>3 else None,
                    x[2][2] if len(x)>2 else None
                    ))
于 2013-02-14T07:25:21.363 に答える
1

一般に、sortedいくつかの基準に従ってソートされたリストのコピーを取得するために使用します。

あなたの特定のケースでは、すぐには適用できません。代わりに、次のようなことができます。

output = [in_put[0]] + in_put[1::4] + in_put[2::4] + in_put[3::4] + in_put[4::4]

必要に応じてリストを再配置します。(さらに短く、 を使用できますzip)。

于 2013-02-14T06:37:27.323 に答える