gpt4 book ai didi

python - 使用 Python 删除对象列表中的重复项

转载 作者:IT老高 更新时间:2023-10-28 21:16:05 24 4
gpt4 key购买 nike

我有一个对象列表,我有一个充满记录的数据库表。我的对象列表有一个标题属性,我想从列表中删除任何具有重复标题的对象(保留原始对象)。

然后我想检查我的对象列表是否与数据库中的任何记录有任何重复,如果有,请在将它们添加到数据库之前从列表中删除这些项目。

我已经看到了从这样的列表中删除重复项的解决方案:myList = list(set(myList)),但我不确定如何处理对象列表?

我也需要维护我的对象列表的顺序。我也在想也许我可以使用 difflib 来检查标题的差异。

最佳答案

set(list_of_objects) 只会在你知道什么是重复项的情况下删除重复项,也就是说,你需要定义一个对象的唯一性。

为此,您需要使对象可散列。您需要同时定义 __hash____eq__ 方法,方法如下:

http://docs.python.org/glossary.html#term-hashable

不过,您可能只需要定义 __eq__ 方法。

编辑:如何实现__eq__方法:

正如我所提到的,您需要知道对象的唯一性定义。假设我们有一本书,其属性为 author_name 和 title,它们的组合是唯一的,(因此,我们可以有许多 Stephen King 创作的书,以及许多名为 The Shining 的书,但只有一本书名为 The Shining by Stephen King),然后实现如下:

def __eq__(self, other):
return self.author_name==other.author_name\
and self.title==other.title

同样,这就是我有时实现 __hash__ 方法的方式:

def __hash__(self):
return hash(('title', self.title,
'author_name', self.author_name))

您可以检查,如果您创建一个包含 2 本书的列表,其作者和标题相同,则书籍对象将 相同(使用 is 运算符)并且 相等( == 运算符)。另外,当使用 set() 时,它会删除一本书。

编辑:这是我的一个旧答案,但我现在才注意到它有错误,在最后一段中用删除线更正:对象具有相同的 hash()与 is 相比, 不会给出 True。但是,如果您打算将它们用作集合的元素或字典中的键,则使用对象的哈希性。

关于python - 使用 Python 删除对象列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169252/

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