无需求助于 csv 文件即可保存和加载复杂的 python 字典

Saving and loading a complicated python dictionary without resorting to csv files

我处理简单词典已有一段时间了,我知道 save/load 它们的唯一方法是通过 pandas 中的 to_csv()pd.read_csv()。因为 csv 是我所知道的唯一可以完成工作的方法,所以有时我可能会遇到字典,其键可能与无法在 csv 中正确 saved/loaded 的复杂内容相关联,这是为什么我在这里寻求帮助。

这是我刚刚想出的一个稍微复杂的字典的例子:

import numpy as np
import pandas as pd

simple_dict1 = {'dict1': {'item1': None,
                          'item2': False,
                          'item3': 'hello world',
                          'item4': 42.42,
                          'item5': [f'item {i}' for i in range(42)],
                          'item6': {f'itme {i}': i for i in range(42)},
                          'item7': np.random.rand(3,42),
                          'item8': pd.DataFrame(np.random.rand(3,42), columns = [f'col {i+1}' for i in range(42)]) 
                          },
                'dict2': {'item1': True,
                          'item2': 'hello',
                          'item3': 24.24,
                          'item4': [f'item {i}' for i in range(24)],
                          'item5': {f'itme {i}': i for i in range(24)},
                          'item6': np.random.rand(2,24),
                          'item7': pd.DataFrame(np.random.rand(2,24), columns = [f'col {i+1}' for i in range(24)]) 
                          },
                'dict3': {'item1': (10,20),
                          'item2': [],
                          'item3': {},
                          'item4': (),
                          'item5': {i for i in range(4)},
                          'item6': {f'itme {i}': {} for i in range(24)},
                          },
                'list1': [type(item) for item in ({}, [], ())]
                }

我的目标是创建两个函数:

功能一:将relative/absolute路径和字典作为输入,将字典保存到路径中。

功能2:以relative/absolute路径为输入,从该路径读取字典,return该字典。该词典需要与保存的原始词典相同。

这个问题可能问的太多了,但我真的没有深入了解如何save/load像上面那样复杂的字典。 先感谢您。

编辑:将其中一个标签更改为 pickle,因为 pickle 可能能够解决问题。

您可以使用 pickle 标准库加载和保存任意数据结构。

https://docs.python.org/3/library/pickle.html

注意事项:如该页面所示,请勿取消选择不受信任的数据,不同 python 版本之间的 pickle 格式可能会发生变化。