gpt4 book ai didi

Pythonistas,如何在 MySQL 中从上到下从左到右移动数据(考虑每个 ID 的多个值)?

转载 作者:行者123 更新时间:2023-11-29 02:36:42 26 4
gpt4 key购买 nike

手头的任务是将表 1 中所示的数据移动到表 2 中。

表(一)

ID  Val
-- ---
1 a
1 b
1 c
2 k
3 l
3 m
3 n

Val 列取决于每个 ID 的唯一值的数量。在这种情况下它是 3,但在现实世界中它可以是 20!

表(二)

ID  Val1 Val2 Val3  
-- -- -- --
1 a b c
2 k
3 l m n

对于较小的 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

import itertools

a = [(1, 'a'), (1, 'b'), (2, 'c')]

# groupby need sorted value so sorted in case
a.sort(key=lambda x:x[0])

for i, j in itertools.groupby(a, key=lambda x:x[0]):
print i, [k[1] for k in j]

返回

1 ['a', 'b']
2 ['c']

关于Pythonistas,如何在 MySQL 中从上到下从左到右移动数据(考虑每个 ID 的多个值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4088639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com