python枚举字典值对象-不适用于大型对象

python枚举字典值对象-不适用于大型对象,python,json,dictionary,Python,Json,Dictionary,我用python将一个json文件加载到一个目录中,然后枚举json键对象。我有以下代码块: datelimit = datetime.datetime(2018, 4, 1) # limit date for completed_time to_remove = [] dateformat = '%Y-%m-%dT%H:%M:%S.%f' for k, v in item_dict.items(): # enumerate top_leve

我用python将一个json文件加载到一个目录中,然后枚举json键对象。我有以下代码块:

    datelimit = datetime.datetime(2018, 4, 1)       # limit date for completed_time
to_remove = []
dateformat = '%Y-%m-%dT%H:%M:%S.%f'
for k, v in item_dict.items():                  # enumerate top_level objects
    for i, block in enumerate(v['completed']):  # enumerate inner blocks
        complete_time = datetime.datetime.strptime(   # skip last char from complete_time
            block["complete_time"][:-1], dateformat)
        # print(k, i, complete_time)              # uncomment for tests
        if complete_time < datelimit:           # too old
            to_remove.append((k, i))            # store the index for later processing

for k, i in reversed(to_remove):           # start from the end to keep consistent indices
    del item_dict[k]["completed"][i] 

关于处理更大的json文件有什么建议吗?错误的原因是什么?谢谢

文件的大小不应该成为问题-看起来您的数据不一致。尝试在内部循环之前进行检查,查看
'completed'
是否是
v
中的一个键。在检查失败的情况下,使用print语句找出哪里出了问题(即在该迭代中
v
中有哪些键)。谢谢andrew,是的,我可以看到一些块没有“完成”或“完成时间”键。我认为这就是问题所在。我该如何处理这件事?检查它是否存在,然后执行操作,否则“通过”?是的,这就是想法。类似于:
if“completed”not in v.keys():print(“Warning!”completed“not found in key of v”)
其他:对于i,在枚举中阻塞(v['completed']):#枚举内部块…
但是否要通过取决于在未找到
已完成的
时使用
删除
时会发生什么。嗨,安德鲁,我还有一个问题。当您说文件大小不是问题时,您认为这段代码可以处理大型json文件吗?(~100 MB)或者我应该考虑将json数据分成块吗?取决于您有多少可用内存。但是如果你遇到一个特定的问题,我建议你写一篇新的帖子。祝你好运
for i, block in enumerate(v['completed']):  # enumerate inner blocks
    for i, block in enumerate(v['completed']):
KeyError: 'completed'