循环的问题是django

时间:2013-02-08 04:08:38

标签: python django loops

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

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)

我试过循环,但结果数组只包含最后一条记录,我想要一个包含所有用户所有记录的数组。

e.g。

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]那么它会显示该列的值。

提前致谢。

1 个答案:

答案 0 :(得分: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列排序

并不重要