1

こんにちは私はPythonを初めて使用します。リストのリストがあります。

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

そして、私は次のような出力をしたかった、

out_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']],
           ]

私はいくつかの方法を試しましたが、解決策を見つけることができません。

for domain in data:
    if domain[0] not in temp:
        final_dom.append(domain)
        print "final_dom :::",final_dom
        temp.append(domain[0])
    else:
        print "adsada"
        final_dom.pop()
        final_dom.append(domain)
        print "final_dom :::",final_dom
4

1 に答える 1

2
from itertools import groupby, product
from operator import itemgetter

groups = [list(g) for _,g in groupby(data,key=itemgetter(0))]
for i in range(1,len(groups)+1):
    print list(product(*groups[:i]))

アウト:

[(['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', '=', 16], ['so', '=', 2]),
 (['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 1]), 
 (['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 2]), 
 (['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 1]), 
 (['shop_id', '=', 1], ['product_id', '=', 4], ['so', '=', 2]),
 (['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 1]),
 (['shop_id', '=', 1], ['product_id', '=', 6], ['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], ['so', '=', 1], ['state', '=', u'draft']), 
 (['shop_id', '=', 1], ['product_id', '=', 8], ['so', '=', 2], ['state', '=', u'draft']), 
 (['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], ['so', '=', 1], ['state', '=', u'draft']),
 (['shop_id', '=', 1], ['product_id', '=', 6], ['so', '=', 2], ['state', '=', u'draft'])]
于 2013-02-13T12:48:21.127 に答える