手头的任务是将表1所示的数据移动到表2中的数据。在
表(1)
ID Val
-- ---
1 a
1 b
1 c
2 k
3 l
3 m
3 n
Val列取决于每个ID的唯一值的数量。在本例中,它是3,但在现实世界中可能是20!在
表(2)
^{pr2}$如何处理Val列的较小值(在本例中为3个):
我创建了一个临时表。在
create table test(ID int not null, b int auto_increment not null,primary key(ID,b), Val varchar(255));
然后插入数据进行测试。在
我得到以下结果(我必须手动创建Val列):
ID Val b
-- --- --
1 a 1
1 b 2
1 c 3
2 k 1
3 l 1
3 m 2
3 n 3
我知道这是一个繁琐的过程,需要大量的手工工作。这是在我爱上Python之前!非常感谢Python为这个问题提供一个高效的解决方案!在
import MySQLdb
import itertools
import dbstring
cursor = db.cursor()
cursor.execute("select ID, val from mytable")
mydata = cursor.fetchall()
IDlist = []
vallist = []
finallist = []
for record in mydata:
IDlist.append(record[1])
vallist.append(record[2])
zipped = zip(IDlist,vallist)
zipped.sort(key=lambda x:x[0])
for i, j in itertools.groupby(zipped, key=lambda x:x[0]):
finallist = [k[1] for k in j]
finallist.insert(0, i)
finallist += [None] * (4 - len(finallist)) ### Making it a uniform size list
myvalues.append(finallist)
cursor.executemany("INSERT INTO temptable VALUES (%s, %s, %s, %s)", myvalues)
db.close()
pytonic的方法是使用itertools.groupby
返回
^{pr2}$相关问题 更多 >
编程相关推荐