python - 添加新数据、更新现有数据和删除缺失数据的算法
问题描述
我做了很多搜索,但无法找到满意的答案来实现以下目标的最有效方法。
假设我的应用程序包含产品列表。每天结束时都会调用一个外部服务,该服务会从主数据源返回另一个产品列表。
- 如果主数据中的产品列表包含任何不在我的应用程序中的产品,请将产品添加到应用程序。</li>
- 如果主数据中的产品已经在我的应用程序中,并且没有进行任何更改,则什么也不做。</li>
- 如果主数据中的产品已经在我的应用程序中,但是一些数据发生了变化(例如产品的名称),请更新产品。</li>
- 如果产品在我的应用程序中可用,但不再在主数据源中,请在应用程序中将其标记为“不可用”。</li>
目前,我在每个列表上进行循环,遍历每个产品的另一个列表:
- 对于主数据列表中的每个产品,循环浏览 App 中的产品,并根据需要进行更新。如果没有找到产品,则将产品添加到应用程序。</li>
- 然后,对于 App 中的每个产品,循环遍历主数据列表中的产品,如果没有找到,则在 App 中标记为“不可用”。</li>
我想知道是否有更有效的方法来实现这一目标?或者与这里相关的任何算法或模式?
在每种情况下,产品都由 Python 列表中的对象表示。
解决方案
首先,我建议将dict
s 与 Product 代码(或名称或其他)一起用作键,并将 Productobject
用作值。这应该使您的循环在一千个条目上至少快 100 倍。
然后特别是对于第二次搜索,可能值得探索将第一次的键转换dict
为 aset
并循环差异的可能性,如
for i in set(appDict.keys()).difference(masterDict.keys()):
##update unavailable Product data
推荐阅读
- ionic-framework - 修复 TS2345:“HTMLElement”类型的参数不可分配给“HTMLInputElement”类型的参数
- mysql - 为什么在 AWS(Lightsail 和 EC2)上运行的 Ubuntu 18.04 上安装 MYSQL 服务器后出现 ssh 连接错误?
- java - 运行按钮显示为灰色 - intellij
- python - 在 Blender 的 Python 中安装 Dlib 时出错
- c - 如何编写在程序上执行 gdb 的 bash 脚本
- javascript - 在 JavaScript 中的属性数组中嵌套属性
- oracle - 在 SQL Developer 中命名已经存在的错误
- c++ - 使用while循环从.txt文件输出行时遇到问题,txt文件的每个单词都从新行开始
- avro - Kafka Streams:序列化回 avro
- javascript - JavaScript - 在传单中调用带有变量的函数