想要通过取消嵌套这些 for 循环来实现大 O(n)。试过这个,但得到 TypeError: 'int' object is not subscriptable

时间:2021-07-22 13:28:14

标签: python json

import json

hrefs = list()

# open all workloads file as input
with open('json/allWorkloads.json') as workloads:
    workloads = json.load(workloads)

with open('/users/home/xbbpggp/illumioProject/json/updatedDuplicates.json') as dups:
    dups = json.load(dups)

# for dup in dups:
#     dupHref = dup["href"]
#     for workload in range(len(workloads)-1):
#         if workloads[workload]["href"] == dupHref:
#             del workloads[workload]

for dup in dups:
    hrefs.append(dup["href"])

for workload in range(len(workloads)-1):
    if workload["href"] in hrefs:
        del workloads[workload]

with open('json/noDupWorkloads.json', 'w') as f:  
    json.dump(workloads, f, indent=4)

这是我目前的代码。注释掉的是我当前的工作脚本。然而,当给定数以万计的工作负载时,由于大 O(n^2),这需要非常长的时间来运行。我试图将它们分开,并跟踪列表中的每个 dup href,但是我收到第 22 行的错误消息:

if workload["href"] in hrefs:
TypeError: 'int' object is not subscriptable.

对此是否有任何修复,或完成我正在尝试做的事情的替代方法?

编辑:

我首先尝试了推荐的更改:

if workloads[workload]["href"] in hrefs:

然而,这现在产生了一个新的错误:

IndexError: list index out of range

但是现在有人在评论中提醒我注意 in 运算符仍然是 O(n^2)...但至少它不像以前那样嵌套了?那么,如果我继续尝试解决这个问题,会不会更好一些?

0 个答案:

没有答案