【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 三种方法字符串转字典

### 回答1: 以下是将字典转换为列表的四种方法: 1. 将字典的键和值分别存储在两个列表中: ```python my_dict = {'a': 1, 'b': 2, 'c': 3} keys = list(my_dict.keys()) values = list(my_dict.values()) my_list = [keys, values] print(my_list) ``` 输出结果: ``` [['a', 'b', 'c'], [1, 2, 3]] ``` 2. 使用列表推导式: ```python my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = [[k, v] for k, v in my_dict.items()] print(my_list) ``` 输出结果: ``` [['a', 1], ['b', 2], ['c', 3]] ``` 3. 使用zip函数: ```python my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = list(zip(my_dict.keys(), my_dict.values())) print(my_list) ``` 输出结果: ``` [('a', 1), ('b', 2), ('c', 3)] ``` 4. 使用dict.items()方法: ```python my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = list(my_dict.items()) print(my_list) ``` 输出结果: ``` [('a', 1), ('b', 2), ('c', 3)] ``` ### 回答2: Python四种方法字典转化为列表: 方法一:使用列表推导式(List Comprehension) 可以使用列表推导式将字典的键和值分别提取出来,并创建一个由键值对组成的列表。 示例代码如下: ```python d = {'a': 1, 'b': 2, 'c': 3} lst = [(key, value) for key, value in d.items()] print(lst) ``` 方法二:使用zip()函数 可以使用zip()函数将字典的键和值分别提取出来,并将它们打包在一起。然后可以再次使用列表推导式创建一个由键值对组成的列表。 示例代码如下: ```python d = {'a': 1, 'b': 2, 'c': 3} lst = list(zip(d.keys(), d.values())) print(lst) ``` 方法三:通过循环遍历字典 可以通过循环遍历字典的键和值,并将它们作为元组添加到列表中。 示例代码如下: ```python d = {'a': 1, 'b': 2, 'c': 3} lst = [] for key, value in d.items(): lst.append((key, value)) print(lst) ``` 方法四:使用iteritems()函数(仅适用于Python 2.x) 在Python 2.x中,可以使用iteritems()函数将字典的键值对一次性转化为一个生成器对象,并使用list()函数将其转化为列表。 示例代码如下: ```python d = {'a': 1, 'b': 2, 'c': 3} lst = list(d.iteritems()) print(lst) ``` 以上是四种常见的方法字典转化为列表。根据具体的需求和Python版本的不同,选择适合的方法即可。 ### 回答3: Python字典转化为列表有四种方法: 1. 使用字典的keys()和values()方法: 使用keys()方法可以获得字典中所有的键,使用values()方法可以获得字典中所有的值。利用这两个方法可以分别将键和值存储到列表中。例如: ``` my_dict = {'a': 1, 'b': 2, 'c': 3} my_list_keys = list(my_dict.keys()) my_list_values = list(my_dict.values()) ``` 这样,可以获得包含字典所有键的列表my_list_keys和包含字典所有值的列表my_list_values。 2. 使用字典的items()方法: 使用items()方法可以获得字典中所有项(键值对),返回一个包含元组的列表。利用这一特性,可以直接将字典转化为列表。例如: ``` my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = list(my_dict.items()) ``` 这样,可以获得包含字典所有项的列表my_list。 3. 使用列表推导式: 利用列表推导式可以将字典转化为包含指定元素的列表。例如,如果想将字典中的键存储在列表中,可以使用以下代码: ``` my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = [key for key in my_dict.keys()] ``` 这样,可以获得包含字典所有键的列表my_list。 4. 使用zip()函数: zip()函数可以将多个可迭代对象对应位置的元素打包成元组,并返回一个包含这些元组的列表。利用zip()函数,可以将字典的键和值一起存储到列表中。例如: ``` my_dict = {'a': 1, 'b': 2, 'c': 3} my_list = list(zip(my_dict.keys(), my_dict.values())) ``` 这样,可以获得包含字典所有键和对应值的列表my_list。 以上四种方法可以根据具体需求选择合适的方法字典转化为列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值