我有一个嵌套的字典,示例是dict = {'exp_0': {'A':obj, 'B':obj}, 'exp_1': {'A': obj, 'C':obj, 'D':obj}, 'exp_2': {'E':obj, 'C': obj, 'F':obj}}
obj是一个类的对象,我需要为每个元素调用一个obj函数。所以我写了下面这段代码
for expr in dict:
for k, v in dict[expr].items():
v.somefunction() ## some function is in obj class
def somefunction():
# this class has self.id variable
inst = {"a": self.a, "b":self.b}
try:
with open("test", "w") as ffile:
json.dump(inst, ffile)
print("success for %s" %(self.id))
except:
print("Failre for %s" %(self.id))这段代码运行得很好,问题是,它花费了大量的时间,假设嵌套字典{'A': obj, 'B': obj, ...}有500个元素,那么它将使用8-9 seconds
有没有什么时间有效的方法来做到这一点?
发布于 2020-04-16 01:51:28
时间可能不是字典迭代所用的时间。实际时间可能是由于在for循环中多次打开和关闭文件,并在for循环中执行json.dump()。因为somefunction()是从嵌套循环内部调用的。
您应该在中间集合中收集您的数据。然后打开文件一次,写入值列表,然后在最后关闭文件(同样,只有一次)。它应该会提高性能。
对json.dump()的多次调用也可能是一个问题。
在这些情况下,最好将代码转换为批量执行操作。这将使您的性能得到改善。
https://stackoverflow.com/questions/61234702
复制相似问题