【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

參考:https://blog.csdn.net/yangtf07/article/details/81571371

# -*- 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']

擴展:Python 三種方法字符串轉字典

Python 三種方法字符串轉字典

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章