1

DB からあまりにも多くのユーザーのデータを取得しています。すべてのデータが収集される配列には、ユーザーごとに 2 つの行があり、最後の列の値のみが異なり、残りの値は同じです

r1 --> a , b , c , d , 1 (user1)
r2 -- > a , b , c , d , 2 (user1)
r3 --> z , x , v , n , 3 (user2)
r4 -- > z , x , v , n , 4 (user2)

今、各ユーザーに対応する行を1つだけ含むが、次のようなすべての値で構成される配列を作成したい

r1 --> a , b , c , d , 1 , 2 (user1)
r2 -- >z , x , v , n , 3 , 4 (user2)

for loop を試しましたが、結果の配列は最後のレコードのみで構成され、すべてのユーザーのすべてのレコードで構成される配列が必要でした。

例えば

cursor.execute("some query ")
    numrows = int(cursor.rowcount) 

この num 行は値 4 を返します。

それから

for I in range(numrows):

合格

4 回ループしますが、実際には 2 人のユーザーの値で構成されます。

しかし、結果の配列を返すと、最後のユーザーの値のみで構成されます。

for I in range(numrows):したがって、これを行うときに返される配列が最後のユーザーレコードだけでなくすべてのレコードで構成されるように、何らかの方法を提案してください

編集:

whileループも試しました

arr=[]
while arr in row:
   arr= row[0][1]

しかし、この arr を返すと空になりますが、row[0][1] を返すと、その列の値が表示されます。

前もって感謝します。

4

1 に答える 1

1

データが最初の 4 つのエントリでソートされていると仮定すると (SQL で実行できます)、次のコードを使用してデータを変換できます。

from itertools import groupby
from operator import itemgetter

rows=[
    ('a' , 'b' , 'c' , 'd' , 1),
    ('a' , 'b' , 'c' , 'd' , 2),
    ('z' , 'x' , 'v' , 'n' , 3),
    ('z' , 'x' , 'v' , 'n' , 4)]



out = []
for key,group in groupby(rows, itemgetter(0,1,2,3)):
    new_row = list(key)
    for v in group:
        new_row.append(v[4])
    out.append(new_row)

print out

印刷する

[['a', 'b', 'c', 'd', 1, 2], ['z', 'x', 'v', 'n', 3, 4]]

ここにもう 1 つのアイデアがあります。最初の 4 つのエントリを辞書のキーとして使用します。

from collections import defaultdict

rows=[
    ('a' , 'b' , 'c' , 'd' , 1),
    ('a' , 'b' , 'c' , 'd' , 2),
    ('z' , 'x' , 'v' , 'n' , 3),
    ('z' , 'x' , 'v' , 'n' , 4)]



d = defaultdict(list)
for r in rows:
    d[tuple(r[0:4])].append(r[4])

print d[('a' , 'b' , 'c' , 'd')]
print d[('z' , 'x' , 'v' , 'n')]

版画

[1, 2]
[3, 4]

このアプローチでは、行が最初の 4 列でソートされているかどうかは問題ではありません

于 2013-02-08T07:59:13.133 に答える