Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python3中循环嵌套字典的高效时间方法_Python 3.x - Fatal编程技术网

Python 3.x 在Python3中循环嵌套字典的高效时间方法

Python 3.x 在Python3中循环嵌套字典的高效时间方法,python-3.x,Python 3.x,我有一个嵌套字典,示例是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

我有一个嵌套字典,示例是
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秒


有没有节省时间的方法可以做到这一点?

字典迭代可能不会占用时间。实际时间可能是由于在for循环中多次打开和关闭文件,并在for循环中执行
json.dump()
。因为
somefunction()
是从嵌套循环内部调用的

您更应该在中间集合中收集数据。然后打开文件一次,写入值列表,最后关闭文件(再次,仅一次)。它应该提高性能

多次调用
json.dump()
也可能是一个问题


在这些情况下,最好将代码转换为批量执行操作。如果他需要为每个对象编写一个新文件,他怎么能只打开一次文件呢?如果他必须为每个对象编写新文件,那么他就无能为力了。唯一的事情是并行化进程。@RoadRunner是的,你是对的,我需要为每个对象转储一个新文件。@ggupta,你为什么需要这样做?可能会让我们知道问题所在。也许会有更好的解决办法。@RohitJain,整个情况是object是一个容器类,比如说一个窗口。对于像“A”、“B”这样的每个元素,它们都有一个单独的容器。所以我需要将每个元素容器的实例变量(不是全部)转储到新文件中。附言:泡菜不是我的选择。