python基礎面試題之型別轉換(字典篇)
阿新 • • 發佈:2021-06-16
問 如何將一個字典字串轉換成字典;
user_info='{"name" : "rianley", "gender" : "male", "age": 18}'
最簡單的方式;用json轉換一下唄;程式碼如下;
>>> import json >>> user_info= '{"name" : "rianley", "gender" : "male", "age": 18}' >>> user_dict = json.loads(user_info)
但是使用json
進行轉換存在一個潛在的問題。
由於json
語法規定陣列或物件之中的字串必須使用雙引號,不能使用單引號
就是 類似於下面的dict字串轉換是會出現錯誤的
user_info="{'name' : 'rianley', 'gender' : 'male', 'age': 18}"
通過 eval
>>> user_info = '{"name" : "rianley", "gender" : "male", "age": 18}' >>> user_dict = eval(user_info) >>> user_dict {'gender': 'male', 'age': 18, 'name': 'rianley'} >>> user_info = "{'name' : 'rianley', 'gender' : 'male', 'age': 18}" >>> user_dict = eval(user_info) >>> user_dict {'gender': 'male', 'age': 18, 'name': 'rianley'}
通過eval
進行轉換就不存在上面使用json
進行轉換的問題。但是,使用eval
卻存在安全性的問題
,比如下面的例子:
# 讓使用者輸入 `user_info` >>> user_info = raw_input('input user info: ') # 輸入 {"name" : "john", "gender" : "male", "age": 28},沒問題 >>> user_dict = eval(user_info) # 輸入 __import__('os').system('dir'),user_dict 會列出當前的目錄檔案! # 再輸入一些刪除命令,則可以把整個目錄清空了! >>> user_dict = eval(user_info)
通過 ast庫中的literal_eval函式
>>> import ast >>> user = '{"name" : "rianley", "gender" : "male", "age": 18}' >>> user_dict = ast.literal_eval(user) >>> user_dict {'gender': 'male', 'age': 28, 'name': 'john'} user_info = "{'name' : 'rianley', 'gender' : 'male', 'age': 18}" >>> user_dict = ast.literal_eval(user) >>> user_dict {'gender': 'male', 'age': 18, 'name': 'rianley'}
使用ast.literal_eval
進行轉換既不存在使用json
進行轉換的問題,也不存在使用eval
進行轉換的安全性問題
,因此推薦使用ast.literal_eval
。
每天記錄一個小知識.....