在工作中遇到乙個小問題,需要將乙個python
的字串轉為字典,比如字串:
user_info = ''我們想把它轉為下面的字典:
user_dict =有以下幾種方法:
1、通過 json 來轉換
>>> import json但是使用>>> user_info= ''
>>> user_dict = json.loads(user_info)
>>> user_dict
json
進行轉換存在乙個潛在的問題。
>>> import json2、通過 eval>>> user_info = ""
# 由於字串使用單引號,會導致執行出錯
>>> user_dict = json.loads(user_info)
traceback (most recent call last):
file "", line 1, in file "/usr/local/cellar/python/2.7.11/frameworks/python.framework/versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
file "/usr/local/cellar/python/2.7.11/frameworks/python.framework/versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
file "/usr/local/cellar/python/2.7.11/frameworks/python.framework/versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
valueerror: expecting property name: line 1 column 2 (char 1)
>>> user_info = ''通過>>> user_dict = eval(user_info)
>>> user_dict
>>> user_info = ""
>>> user_dict = eval(user_info)
>>> user_dict
eval
進行轉換就不存在上面使用json
進行轉換的問題。但是,使用eval
卻存在安全性的問題
,比如下面的例子:
# 讓使用者輸入 `user_info`3、通過 literal_eval>>> user_info = raw_input('input user info: ')
# 輸入 ,沒問題
>>> user_dict = eval(user_info)
# 輸入 __import__('os').system('dir'),user_dict 會列出當前的目錄檔案!
# 再輸入一些刪除命令,則可以把整個目錄清空了!
>>> user_dict = eval(user_info)
>>> import ast使用>>> user = ''
>>> user_dict = ast.literal_eval(user)
>>> user_dict
user_info = ""
>>> user_dict = ast.literal_eval(user)
>>> user_dict
ast.literal_eval
進行轉換既不存在使用json
進行轉換的問題,也不存在使用eval
進行轉換的安全性問題
,因此推薦使用ast.literal_eval
。
參考資料
Python 如何將字串轉為字典
在工作中遇到乙個小問題,需要將乙個 python 的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 1 通過 json 來轉換 import json user info user dict json.loads user info user...
Python 如何將字串轉為字典
在工作中遇到乙個小問題,需要將乙個 python 的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user info 有以下幾種方法 通過 json 來轉換 import json user info user dict json.loads user info user d...
Python 如何將字串常量轉為變數?
1 如何動態生成變數名?m 同學的問題如下 打擾一下大家,請教個問題,已知 list a b c d 如何才能得到以 list 中元素命名的新列表 a b c d 呢?簡單理解,這個問題的意思是,將字串內容作為其它物件的變數名。list 中的元素是字串,此處的 a d 是常量,而在要求的結果中,a ...