Python 三种方法字符串转字典
- eval:不安全,容易被用户恶意操作
- ast.literal_eval:安全,专门用于字符串类型转换其他类型
- json:只能转换外单引号,内双引号的字符串
eval和literal_eval
# -*- coding: utf-8 -*-
import json, ast
# TODO: 内单引号,外双引号
s = "{'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}"
# TODO:外单引号,内双引号
s_ = '{"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]},"产品":{"产品经理":["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"],"产品设计师":["网页产品设计师", "无线产品设计师"]}}'
print('s ', type(s), s)
print('s_', type(s_), s_)
## 1. eval
res = eval(s)
print(type(res), res)
res = ast.literal_eval(s)
print(type(res), res)
## 2. literal_eval
res = ast.literal_eval(s)
print(type(res), res)
res = ast.literal_eval(s_)
print(type(res), res)
## 3. json
res = json.loads(s_)
print(type(res), res)
s <class 'str'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']},'产品':{'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'],'产品设计师':['网页产品设计师', '无线产品设计师']}}
s_ <class 'str'> {"技术": {"后端开发": ["Java", "C++", "PHP"], "移动开发": ["HTML5", "JavaScrpit"]},"产品":{"产品经理":["产品经理", "网页产品经理", "移动产品经理", "产品助理", "数据产品经理", "电商产品经理", "游戏策划", "产品实习生"],"产品设计师":["网页产品设计师", "无线产品设计师"]}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
<class 'dict'> {'技术': {'后端开发': ['Java', 'C++', 'PHP'], '移动开发': ['HTML5', 'JavaScrpit']}, '产品': {'产品经理': ['产品经理', '网页产品经理', '移动产品经理', '产品助理', '数据产品经理', '电商产品经理', '游戏策划', '产品实习生'], '产品设计师': ['网页产品设计师', '无线产品设计师']}}
扩展:Python存储字典的四种方法
https://blog.youkuaiyun.com/Spade_/article/details/105515950
本文介绍了使用Python将字符串转换为字典的三种方法:eval、ast.literal_eval和json。对比了它们的安全性和适用场景,并提供了示例代码,展示了如何处理不同格式的字符串。
1936

被折叠的 条评论
为什么被折叠?



