我正在从数据库中获取太多用户的数据,收集所有数据的数组每个用户有两行,只有最后一列值不同,其余值相同
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 循环,但结果数组仅包含最后一条记录,我想要一个包含所有用户的所有记录的数组。
例如
cursor.execute("some query ")
numrows = int(cursor.rowcount)
让此 num rows 返回值 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 个条目排序(您可以在 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 列排序并不重要
关于python - django 的循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765515/