我使用的是Python3.10,我有一个三级嵌套的大词典,格式如下:

 a  = {k1:
         {k2:
            {k3:
            }
         }
      }

我应该在每个级别上做一些任务.任务通过将DICTIONARY的键值指定为其名称来将嵌套的DICTIONARY切片到不同的文件.

  • 第一级名称-->f"{k1}.txt"
  • 第二级名称-->f"{k1}{k2}.txt"
  • 第三级名称-->f"{k1}{k2}{k3}.txt"

大概如下所示:

import pickle

for k1, k1_data in a.items():

   # Save k1_data as f"{k1}.txt" 
   with open(f"{k1}.txt", "wb") as file:
       pickle.dump(k1_data, file)

    for k2, k2_data in k1_data.items():

        # Save k2_data as f"{k1}_{k2}.txt"
        with open(f"{k1}_{k2}.txt", "wb") as file:
            pickle.dump(k2_data, file)

        for k3, k3_data in k2_data.items():

           # Save k3_data as f"{k1}_{k2}_{k3}.txt"
           with open(f"{k1}_{k2}_{k3}.txt", "wb") as file:
               pickle.dump(k3_data, file)

完成所有任务需要1个小时.我搜索了很多多线程模块和示例.

它们的形式是收集参数并将参数发送给函数.然后,它们全部并行运行.

在下面的示例中:Function-->DO_TASK,PARAMETERS--&gT;MY_LIST

 result_list = []
 with Pool() as pool:
            for result in pool.map_async(do_task, my_list).get():
                result_list.append(result)

然而,我感到困惑的是,我如何才能在Python中对我的情况做同样的事情呢?

推荐答案

你可以试着用concurrent.futures模块.它提供了一个高级接口,用于使用线程或进程异步执行可调用(函数或方法).它通过抽象线程或进程管理的低级细节简化了并行和并发编程的过程.read more

像这样导入它,

from concurrent.futures import ThreadPoolExecutor

然后像这样使用它,

with ThreadPoolExecutor() as executor:
        futures = []
        
        for k1, k1_data in a.items():
            filename_k1 = f"{k1}.txt"
            futures.append(executor.submit(save_data, filename_k1, k1_data))

            for k2, k2_data in k1_data.items():
                filename_k2 = f"{k1}_{k2}.txt"
                futures.append(executor.submit(save_data, filename_k2, k2_data))

                for k3, k3_data in k2_data.items():
                    filename_k3 = f"{k1}_{k2}_{k3}.txt"
                    futures.append(executor.submit(save_data, filename_k3, k3_data))
        
        # wait here for all tasks to complete
        for future in futures:
            future.result()

Python相关问答推荐

使用Python Great Expectations和python-oracledb

删除pandas rame时间序列列中未更改的值

使用多个性能指标执行循环特征消除

覆盖Django rest响应,仅返回PK

Python -Polars库中的滚动索引?

根据给定日期的状态过滤查询集

根据条件将新值添加到下面的行或下面新创建的行中

对某些列的总数进行民意调查,但不单独列出每列

PywinAuto在Windows 11上引发了Memory错误,但在Windows 10上未引发

ModuleNotFound错误:没有名为flags.State的模块; flags不是包

Mistral模型为不同的输入文本生成相同的嵌入

创建可序列化数据模型的最佳方法

通过ManyToMany字段与Through在Django Admin中过滤

将标签移动到matplotlib饼图中楔形块的开始处

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

无法在Spyder上的Pandas中将本地CSV转换为数据帧

判断Python操作:如何从字面上得到所有decorator ?

从一个df列提取单词,分配给另一个列

查看pandas字符列是否在字符串列中

有没有办法让Re.Sub报告它所做的每一次替换?