如何根据2个键删除重复的字典?

2023-12-11

我想删除基于 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

字典列表中每个字典有 7 个键,并使用上面的代码和测试数据99942 文件 took 1457.94099998s or 24mins来处理。有没有更有效的方法来做到这一点?


在最坏的情况下,您的方法需要 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据2个键删除重复的字典? 的相关文章

随机推荐

  • 在 Ubuntu 18.04 上使用 Python3.6 安装底图

    我一直在努力得到Basemap在过去的几个小时内已启动并运行 下列的本教程 I run conda install basemap in my venv在 Pycharm 上 安装按计划进行 我在术语中收到一条消息 指出已经安装了 base
  • 如何在flutter上使用cookie发出http请求?

    我想在正确处理 cookie 的同时向远程服务器发出 http 请求 例如 存储服务器发送的 cookie 并在发出后续请求时发送这些 cookie 最好保留所有 cookie 对于我正在使用的http请求 static Future
  • UserControl 的相对源绑定

    我创建了一个UserControl用于在我的应用程序中显示超链接 这个的标记UserControl好像
  • PayPal Orders V2 未处理批准 url

    根据PayPal订单API作为此处的文档 我们必须首先创建订单 然后从响应中 我们必须复制批准 url 并在浏览器中运行 这将打开 PayPal 页面 买家将批准该请求 此后应发出捕获请求 问题详情 我有以下使用 PayPal API 创建
  • 使 div 表现得像图像

    如果 div 的背景是图像 如何使 div 的大小调整属性的行为与图像标签的行为完全相同 这个想法是复制图像标签在此代码片段中的行为方式 div background color 2DBCFF text align center box s
  • DocuSign Java Rest Api - 结合锚标记自定义文件和 PDF 表单字段转换(复合模板)

    在我的应用程序中 我有一个 PDF 包 我将其合并并发送给 DocuSign 使用 SignHere 和 Initial here AnchorTags 可以完美地完成此操作 但是 我现在需要包含某些需要用户输入字段的 PDF 例如 W 9
  • Emacs Python:Echoing、Hooks 和 Org-mode

    基于这个问题我发现了如何修复 emacs 中 python shell 的回显问题 我想要做的是将其添加到我的 emacs 文件中 以便它会自动发生 defun python startup setq comint process echo
  • Jquery 移动日期选择器未显示在弹出字段中

    I used jtsage jquery mobile date picker 我想在单击弹出窗口内的文本时显示日期选择器 但弹出窗口背面显示的日期选择器我想在弹出窗口前面显示日期选择器 我的代码就像 div a href datepop
  • 使用 smtp SendAsync 发送邮件

    这就是当我需要发送电子邮件时给我带来错误的方式 但此后给我的错误是这样的 此时无法启动异步操作 异步 操作只能在异步处理程序中启动 或者 模块或页面生命周期中的某些事件期间 如果这 执行Page时发生异常 请确保该Page是 标记为 此异常
  • 页面加载时间减少 200 毫秒是否显着? [关闭]

    Closed 这个问题是无关 目前不接受答案 我在我开发的一个网站中使用实验室 js 进行了一些测试 页面加载时间减少了 200 毫秒 现在后端处理后花费的总时间约为1 5秒 我在想是否值得这么麻烦 200ms 是一个巨大的增益吗 可笑吗
  • 一些非常基本的 HTML 中无法解释的偏移量 [重复]

    这个问题在这里已经有答案了 有时我发现自己处于这样的情况 基本上非常简单的 HTML CSS 中有一些我不理解的偏移 这是一个example div style width 100 height 92px div
  • Java JComboBox 是否可以将 editable true 设置为仅一项?

    我想创建一个JComboBox上面有三个项目 我想将其设置为仅可编辑到最后一个项目JComboBox例如 JComboBox cb new JComboBox cb addItem Dog cb addItem Cat cb addItem
  • 如何使用 Selenium Python 从 reddit.com 搜索页面的问题中提取 title 和 href 属性

    我想抓取页面上所有问题的链接和标题 一个元素具有以下结构 a class SQnoC3ObvgnGjWt90zD9Z href r excel comments ayiahc calculating expiration dates pre
  • Python 请求模块中的 SSLError

    我想使用从服务器生成的证书对客户端进行身份验证 我有一个 server ca crt 下面是正在运行的 CURL 命令 如何使用 python requests 模块发送类似的请求 curl X GET u sat username sat
  • http.get 解析错误,代码:“HPE_UNEXPECTED_CONTENT_LENGTH”

    我有一个简单的节点脚本来处理来自我的家庭自动化 API 的一些数据 直到上次 Node 更新之前一切都运行良好 现在 使用 Node 版本 4 3 0 或 5 6 0 http 模块会出现以下错误 Error Parse Error byt
  • 如何从设备和打印机 IShellFolder 获取打印机名称?

    我使用代码获取系统打印机图标 我发现的唯一方法是使用 IShellFolder 现在我想将它们与 InstalledPrinters 连接 但问题是 我找不到找到真实打印机名称的方法 例如 ServerName PrinterName 与
  • 如何开始使用WCF/WPF?

    我已经使用 net 有一段时间了 这些天在我面试的所有地方 我都不断被问及我对 NET 3 0 3 5 技术 WF WPF WCF 等 的了解 你如何开始学习这些 有什么好的链接吗 我应该更改当前的代码以开始像这样工作吗 我尝试以学习新技术
  • 处理 ASP.NET MVC 中的 JavaScript 注入

    我们如何处理 asp net mvc C 应用程序中的 javascript 注入 我可以在我的视图中使用 Html Encode 但问题是我也有 html 可以像博客文章一样显示在页面中 我需要删除在应用程序的输入元素中输入的脚本 我怎样
  • 为什么 Prolog 将变量与直接插入时失败的结果相匹配?

    我正在制作一个 Prolog 程序 用于查找一组列表的子集 该子集必须匹配一些特定条件 其中一个方面是子集的列表不能相同 让我困惑的是 当我尝试查找变量 X 的匹配项时 如果我将它们插入查询中代替 X 它会生成返回 false 的结果 例如
  • 如何根据2个键删除重复的字典?

    我想删除基于 2 个键的重复字典 有没有更快的方法来做到这一点 到目前为止我已经尝试过的 def remove duplicates documents unique documents documents 0 Initialize fir