我知道类似的问题已经有了答案,但我认为我的情况有点不同。 我有一个mysql数据库,有一个大表(40000多个条目) 表结构如下:
Field | Type |Null |Key |Default | Extra
-----------------------------------------------------
Messaggio| longtext |NO | |NULL |
Id | bigint(20) |NO | |NULL |
Data | date |NO | |NULL |
Partito | text |NO | |NULL |
Numero | bigint(23) |NO |PRI |NULL |auto_increment
我必须删除'Messaggio'、'Id'和'Partito'中具有相同值的重复行,例如:
Messaggio |Id | Data | Partito | numero |
----------------------------------------------------------
long_text1 | 123 | somedate | M5s | 1 |
long_text1 | 123 | somedate | M5s | 2 |
long_text2 | 123 | somedate | M5s | 3 |
在这种情况下,我必须删除前2个条目之一。你知道吗
我试过了
db = MySQLdb.connect(host="localhost", port=xxxxx, user="xxxxxxx", passwd="xxxxxx", db="xxxxx", charset='utf8', use_unicode=True)db.ping(True)
cursor = db.cursor()
cursor.execute("SET NAMES utf8;")
cursor.execute("SELECT `Messaggio`, `Id`, `Data`, `Partito`, `Numero` FROM `Statuses` WHERE 1")
data = cursor.fetchall()
data2 = (dict((x[0], x) for x in data).values()
print (data2)
print (len(data))
print (len(data2))
输出:
- a very long list
- 41804
- 39558
我不清楚这段代码((dict((x[0], x) for x in data).values()
)是做什么的(我对python很陌生,而且我还必须弄清楚字典是如何工作的)。首先,它删除了相同的列表(在5个字段中有相同的值),但这是不可能的,因为字段'Numero'是AI,所以它不能有重复项(我在Mysql上检查了一个查询,没有发现'Numero'的重复项)
我的问题:
为什么代码删除了大约2000个项目?它能去除任何一种 复制品?
获得结果的最佳方法是什么?
它将删除除最后一行之外具有相同消息的所有行,请考虑以下代码:
您正在构建一个对同一个键有多个赋值的dict,只有最后一个赋值才会持久
返回到:
从末尾开始,它列出字典的值
dict是从生成器(“tuple of tuples”)创建的:
最内在的部分是:
所以我想你应该用:
相关问题 更多 >
编程相关推荐