python - 加快查找字典列表中的更改
问题描述
我有一个关于如何加快我的代码的问题。
从 api 请求中,我检索了一个巨大的表,我将其转换为字典列表。我每 X 分钟执行一次以保持最新状态。
现在我想将它上传到 firebase firestore 以在我的网络应用程序中使用。为了限制对 firebase 的读取和写入量,我只想发送表中的更改。
我使用这个函数来计算差异(添加、更改和删除)。
def getDifferences(table, tableInfo):
tableName = tableInfo[0]
tableNumber = tableInfo[1]
ID = tableInfo[2]
tableOld = []
if os.path.isfile('/home/bellboy/Python/history/' + tableName + '.txt'):
with open('/home/bellboy/Python/history/' + tableName + '.txt', 'rb') as f:
tableOld = pickle.load(f)
with open('/home/bellboy/Python/history/' + tableName + '.txt', 'wb') as f:
pickle.dump(table, f)
i = {}
added = [i for i in table if i not in tableOld and not any(
d[ID] == i[ID] for d in tableOld)]
changed = [i for i in table if i not in tableOld and any(
d[ID] == i[ID] for d in tableOld)]
deleted = [i for i in tableOld if i not in table and not any(
d[ID] == i[ID] for d in table)]
return [added, changed, deleted]
我怎样才能加快这个功能,列表可以是 40,000 字典长?
ID 检查是必要的,因为字典值可能会发生变化。
样本数据:
[
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204829'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204830'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204831'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204832'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204833'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204834'},
{'volgnummer': u'001', 'naam': u'xxxxxx', 'telefoonnummer': u'0311-xxxxxxx', 'emailadres': u'xxxxxxx@xxxxxx.nl', 'klantnummer': u'204835'},
]
解决方案
推荐阅读
- node.js - 如何在本机反应上使用 Socket.io-stream?
- ionic3 - Paypal SDK 不适用于 INR 货币
- javascript - 可以使用 tel:通过 HTTPS 链接
- mysql - 制作像 instagram 这样的用户列表
- javascript - 只希望使用 react-places-autocomplete 建议的城市和相关国家
- php - 在 PHP 中转换为整数
- python - Excel解析器卡在一行
- highcharts - 在 Bootstrap 布局更改后,Highcharts 和 OpenLayers 不会重新缩放
- javascript - 基于其他输入字段从json中选择2
- android - Android - 带有按钮和文本的 Onclick 视图