我从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]那么它会显示该列的值。
提前致谢。
答案 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列排序
并不重要