哪一个更有效?

2024-04-19 13:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python程序,用于从名称列表中删除重复项。你知道吗

但我现在进退两难,在两种方法中寻找最有效的方法。你知道吗

我已经上传了一个名字列表到一个SQLite数据库,在一个表的列中。你知道吗

在数据库中比较名称并从中删除重复项是好的,还是将它们加载到Python意味着将它们放入Python并删除重复项并将它们推回到数据库中是好的?你知道吗

我很困惑,下面是一段在SQLite上实现的代码:

dup_killer (member_id, date) SELECT * FROM talks GROUP BY member_id, 

Tags: 方法代码程序名称id数据库列表sqlite
1条回答
网友
1楼 · 发布于 2024-04-19 13:23:37

如果将这些名称用作数据库中的键,则数据库将确保它们不重复。因此,没有理由将列表发送到Python并在那里进行重复数据消除。你知道吗

如果还没有将这些名称插入到数据库中,不妨先用Python进行重复数据消除。在Python中使用内置特性可能比重复尝试插入数据库的开销更快。你知道吗

(顺便说一句:如果您将所有插入都打包到一个事务中,则可以真正加快许多名称的插入速度。启动事务,插入所有名称,然后完成事务。数据库会做一些工作来确保数据库的一致性,对于一个完整的名称列表只做一次这项工作要比每个名称做一次效率高得多。)

如果您有Python中的列表,那么可以使用内置特性快速地消除重复。对重复数据消除有用的两个常见功能是setdict。你知道吗

我给你举了三个例子。最简单的情况是,您有一个只包含名称的列表,并且希望得到一个只包含唯一名称的列表;您可以将该列表放入set。第二种情况是列表包含记录,需要提取名称部分来构建集合。第三个例子展示了如何构建一个dict将一个名称映射到一个记录上,然后将该记录插入数据库;与set一样,dict只允许将唯一的值用作键。构建dict时,它将保留列表中同名的last值。你知道吗

# list already contains names
unique_names = set(list_of_all_names)
unique_list = list(unique_names) # lst now contains only unique names

# extract record field from each record and make set
unique_names = set(x.name for x in list_of_all_records)
unique_list = list(unique_names) # lst now contains only unique names

# make dict mapping name to a complete record
d = dict((x.name, x) for x in list_of_records)
# insert complete record into database using name as key
for name in d:
    insert_into_database(d[name])

相关问题 更多 >