1

我从数据库中获取太多用户的数据,收集所有数据的数组对于每个用户有两行,只有最后一列值不同,其余值相同

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)

现在我想创建一个数组,其中仅包含与每个用户对应的一行,但包含每个值,例如

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 次,但实际上它包含两个用户的值。

但是当我返回结果数组时,它只包含最后一个用户的值。

所以请给我一些建议,这样当我这样做时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]]

这是给您的另一个想法:使用您的前 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 回答