Python 哪一个更有效?

Python 哪一个更有效?,python,sqlite,Python,Sqlite,我有一个Python程序,用于从名称列表中删除重复项 但我正处于进退两难的境地,并在两种方法中寻找最有效的方法 我已经将一个名称列表上传到SQLite数据库,并上传到表中的一列中 比较名称并从数据库中删除重复项是好的,还是将它们加载到Python意味着将它们放入Python并删除重复项并将其推回到数据库中是好的 我很困惑,下面是一段在SQLite上执行此操作的代码: dup_killer (member_id, date) SELECT * FROM talks GROUP BY member_

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

但我正处于进退两难的境地,并在两种方法中寻找最有效的方法

我已经将一个名称列表上传到SQLite数据库,并上传到表中的一列中

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

我很困惑,下面是一段在SQLite上执行此操作的代码:

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

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

如果尚未将名称插入数据库,那么最好先用Python对其进行重复数据消除。在Python中使用内置特性可能比重复尝试插入数据库的开销更快

(顺便说一句:如果您将所有插入都打包到一个事务中,那么您确实可以加快插入多个名称的速度。启动一个事务,插入所有名称,然后完成事务。数据库会做一些工作来确保数据库的一致性,而对整个名称列表执行一次插入,效率要高得多而不是每个名字做一次。)

如果您有Python中的列表,您可以使用内置功能快速地对其进行重复数据消除。两个对重复数据消除有用的常见功能是
set
dict

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

# 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])

如果你要把它们放回DB,为什么不先在DB中以重复数据消除的方式存储它们呢?是的@spicavigo,但这段代码正确吗!或者你能告诉我具体的代码吗?你的示例代码在我看来并不完整。你的任何方法都不会保留列表的原始顺序。这可能不重要,但如果它真的存在的话
unique\u names=list(OrderedDict.fromkeys(list\u of_all\u names))
将保留每个名称的第一次出现。@Duncan,如果保留插入数据库表的名称顺序很重要,我会非常惊讶。但是我喜欢这个技巧,我会记住的。谢谢分享。