個人メモとして。
やりたいこと
以下の文字列をそのまま辞書にしたい。
str = "{'名前':'太郎', '身長':'165', '体重':'60'}"
やったこと
astモジュールを利用することにより、そのまま辞書に変換することが出来た。
import ast
str = "{'名前':'太郎', '身長':'165', '体重':'60'}"
dic = ast.literal_eval(str)
print(dic['名前'])
print(type(dic))
↓実行結果↓
太郎
<class 'dict'>
以下を参照させていただきました。
https://blog.mktia.com/how-to-convert-string-to-dict/
追記
@shiracamusさんのコメントより追記させていただきました。
組み込みのeval関数と、ast.literal_evalの違いについて
eval関数は、引数に指定した文字列をpythonプログラムコードとして評価・実行する機能をもつ関数となる。
特に組み込みのeval関数では、悪意のあるユーザーから受け取った文字列をプログラムとして実行してしまいシステムに侵入される等の脆弱性、危険性がある。そのため外部からの文字列を受け取る場合、組み込みのeval関数は使用してはならない。
例)pythonからLinuxのコマンドを実行出来てしまう、、、
>>> eval("__import__('os').system('uname -a')", {})
Linux ubuntu 4.4.0-17763-................
astモジュールのliteral_evalは文字列、バイト列、数、タプル、リスト、辞書、集合、ブール値など評価対象が限定されているのでevalより安全に評価が可能。astを使用すること。