Python將字串轉為字典最佳實踐

2021-09-11 21:14:42 字數 3660 閱讀 3900

在工作中我們經常會遇到資料型別之間的互轉的問題,而通常我們請求一些api藉口返回的結果就是字串,但是格式是json的,在python中轉為字典是最易處理的,所以這裡記錄一下在python下把字串轉為字典的三種方法。

source code:

#!/usr/bin/env python3

#author: nock.chen

str_info = ""

dict_info = eval(str_info)

print("string info type is -->: %s" % (type(str_info)))

print("dict info type is -->: %s" % (type(dict_info)))

複製**

result:

string info type is -->: 'str'>

dict info type is -->: 'dict'>

複製**

不過使用eval有乙個安全性問題,示例如下:

source code:

#!/usr/bin/env python3

#author: nock.chen

str_info = input('input str info: ')

dict_info = eval(str_info)

print("dict_info is >%s< " % dict_info)

複製**

result:

input str info: __import__('os').system('ls')

collector_data.py

test.py

download

dict_info is >0<

複製**

如上所示當我們輸入__import__('os').system('ls')的時候會列印出指令碼所存目錄下的檔案,如果傳入乙個rm -rf *之類的命令,那則會把所有改目錄下的東西刪除掉;當然我們這麼去用的場景會非常好少,也不可能有人會這麼傳值,不過這裡說明一下。

source code:

#!/usr/bin/env python3

#author: nock.chen

import json

str_info = ''

dict_info = json.loads(str_info)

print("string info type is -->: %s" % (type(str_info)))

print("dict info type is -->: %s" % (type(dict_info)))

複製**

result:

string info type is -->: 'str'>

dict info type is -->: 'dict'>

複製**

使用json模組進行轉換也存在乙個問題,由於json語法規定 陣列或物件之中的字串必須使用雙引號,不能使用單引號, 官網上有一段描述是:

報錯示例如下:

#!/usr/bin/env python3

#author: nock.chen

import json

str_info = ""

dict_info = json.loads(str_info)

複製**

報錯結果如下:

traceback (most recent call last):

file "test.py", line 7, in

dict_info = json.loads(str_info)

file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads

return _default_decoder.decode(s)

file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode

obj, end = self.raw_decode(s, idx=_w(s, 0).end())

file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/json/decoder.py", line 355, in raw_decode

obj, end = self.scan_once(s, idx)

json.decoder.jsondecodeerror: expecting property name enclosed in double quotes: line 1 column 2 (char 1)

複製**

source code:

#!/usr/bin/env python3

#author: nock.chen

import ast

str_info = ''

dict_info = ast.literal_eval(str_info)

print("string info type is -->: %s" % (type(str_info)))

print("dict info type is -->: %s" % (type(dict_info)))

s_info = ""

d_info = ast.literal_eval(s_info)

print("s info type is -->: %s" % (type(s_info)))

print("d info type is -->: %s" % (type(d_info)))

複製**

result:

string info type is -->: 'str'>

dict info type is -->: 'dict'>

s info type is -->: 'str'>

d info type is -->: 'dict'>

複製**

使用ast.literal_eval進行轉換既不存在使用json模組進行轉換的問題,也不存在使用eval模組進行轉換的安全性問題,因此推薦大家使用ast.literal_eval的方法。

Python 將字串轉為字典

在工作中遇到乙個小問題,需要將乙個python的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 import json user info user dict json.loads user info user dict 但是使用json進行...

Python 如何將字串轉為字典

在工作中遇到乙個小問題,需要將乙個python的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 1 通過 json 來轉換 import json user info user dict json.loads user info user d...

Python 如何將字串轉為字典

在工作中遇到乙個小問題,需要將乙個 python 的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 1 通過 json 來轉換 import json user info user dict json.loads user info user...