首页 > 解决方案 > 加快查找字典列表中的更改

问题描述

我有一个关于如何加快我的代码的问题。

从 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'},
 ]

标签: python

解决方案


推荐阅读