Python存储字典的四种方法
- 0.直接字典和被字符串包裹的字典
- 1.eval + str
- 2.json
- 3.pickle
- 4.numpy
- 扩展:Python 三种方法字符串转字典
0.直接字典和被字符串包裹的字典
d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
s = "{'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}"
1.eval + str
# -*- coding: utf-8 -*-
d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
s = "{'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}"
def save(dict):
if isinstance(dict, str):
dict = eval(dict)
with open('a.txt', 'w', encoding='utf-8') as f:
f.write(str(dict)) # dict to str
def load():
with open('a.txt', 'r', encoding='utf-8') as f:
dict = eval(f.read()) # eval
print(dict['技术']['后端开发'])
if __name__ == '__main__':
save(d)
load()
save(s)
load()
['Java', 'C++', 'PHP']
['Java', 'C++', 'PHP']
2.json
存储时更多json类型的处理
# -*- coding: utf-8 -*-
import json
d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
s = "{'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}"
def save(dict):
if isinstance(dict, str):
dict = eval(dict)
with open('a.txt', 'w', encoding='utf-8') as f:
# f.write(str(dict)) # 直接这样存储的时候,读取时会报错JSONDecodeError,因为json读取需要双引号{"aa":"BB"},python使用的是单引号{'aa':'bb'}
str_ = json.dumps(dict, ensure_ascii=False) # TODO:dumps 使用单引号''的dict ——> 单引号''变双引号"" + dict变str
print(type(str_), str_)
f.write(str_)
def load():
with open('a.txt', 'r', encoding='utf-8') as f:
data = f.readline().strip()
print(type(data), data)
dict = json.loads(data)
print(type(dict),dict)
if __name__ == '__main__':
save(d)
load()
save(s)
load()
<class 'str'> {"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]}, "产品": {"产品经理": ["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"], "产品设计师": ["网页产品设计师", "无线产品设计师"]}}
<class 'str'> {"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]}, "产品": {"产品经理": ["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"], "产品设计师": ["网页产品设计师", "无线产品设计师"]}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
<class 'str'> {"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]}, "产品": {"产品经理": ["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"], "产品设计师": ["网页产品设计师", "无线产品设计师"]}}
<class 'str'> {"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]}, "产品": {"产品经理": ["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"], "产品设计师": ["网页产品设计师", "无线产品设计师"]}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
3.pickle
# -*- coding: utf-8 -*-
import pickle
d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
def save_dict(obj, name):
with open(name + '.pkl', 'wb') as f:
pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)
def load_dict(name ):
with open(name + '.pkl', 'rb') as f:
return pickle.load(f)
if __name__ == '__main__':
save_dict(d, "a")
print(load_dict("a"))
{'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
4.numpy
# -*- coding: utf-8 -*-
import pickle
d = {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
import numpy as np
# Save
np.save('my_file.npy', d)
# Load
read_dictionary = np.load('my_file.npy', allow_pickle=True).item()
print(read_dictionary['技术']['移动开发'])
['HTML5', 'JavaScrpit']