Python 如何删除基于2个键的重复字典?

Python 如何删除基于2个键的重复字典?,python,Python,我想删除基于2个键的重复字典。有没有更快的方法 到目前为止我都试过了 def remove_duplicates(documents): unique_documents = [documents[0]] # Initialize first dict for document in documents: for index, unique_document in enumerate(unique_documents): if uniqu

我想删除基于2个键的重复字典。有没有更快的方法

到目前为止我都试过了

def remove_duplicates(documents):
    unique_documents = [documents[0]]  # Initialize first dict
    for document in documents:
        for index, unique_document in enumerate(unique_documents):
            if unique_document['user'] == document['user']:
                if unique_document['text'] == document['text']:
                    # If the user and text are found, then it's a duplicate.
                    # Go to next document.
                    break
                if index == len(unique_documents)-1:
                    # If it reaches the last dict of the unique_documents,
                    # append to list because the dict is unique
                    unique_documents.append(document)

    return unique_documents
在dict列表中,每个dict有7个键,使用上述代码处理99942文档的测试数据需要1457.94099998s24min。有没有更有效的方法可以做到这一点?

在最坏的情况下,您的方法需要O(N**2)个时间(所有文档都是唯一的,您可以为每个测试的文档循环所有唯一的文档)

使用一个单独的集合来跟踪您已经看到的用户文本元组,这样您就可以将其简化为O(N)算法,与唯一文档的数量无关。集合允许您在O(1)时间内测试对象是否存在,从而无需嵌套循环:

def remove_duplicates(documents):
    unique_documents = []
    seen = set()
    for document in documents:
        if (document['user'], document['text']) in seen:
            continue
        unique_documents.append(document)
        seen.add((document['user'], document['text']))

    return unique_documents
从1457.94099998s到1.03100013733s!谢谢