37
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

python3 文字列を辞書に変換

個人メモとして。

やりたいこと

以下の文字列をそのまま辞書にしたい。

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を使用すること。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
37
Help us understand the problem. What are the problem?