Blow Up by Black Swan

Python-文字列型から辞書型への変換

今回は、文字列型から辞書型への変換がテーマです。今回見つけられたのは、以下の2つの方法です。

  1. astモジュールを利用する方法
  2. jsonデータの場合の方法

まず、①のコードです。

#②文字列から辞書型への変換(1つ目-astモジュールの活用)
import ast
sample = '{"ID":1,"対戦相手":"セネガル","スコア":"2-2","得点者1":"乾","得点者2":"本田","開催都市":"エカテリンブルグ","観客数":32572}'
dict_sample = ast.literal_eval(sample)
print(type(dict_sample))
print(dict_sample)

この戻り値は以下になります。

<class 'dict'>
{'ID': 1, '対戦相手': 'セネガル', 'スコア': '2-2', '得点者1': '乾', '得点者2': '本田', '開催都市': 'エカテリンブルグ', '観客数': 32572}

変数sampleは、文字列型になります。これをast.literal_eval()関数に渡すことで、辞書型として読み取ってくれます。astモジュールは、公式ドキュメントをみると「抽象構文木」と書いていますが、情報を解析して妥当なものにしてくれるくらいのものくらいのものかと思います。これを利用することで、辞書型データっぽい文字列を解析して、辞書型データにしてくれます。

もう1つはJsonデータの場合です。これはJsonフォーマットで辞書型表記されているものを辞書型にしてくれるだけです。コードは以下になります。(今挑戦しているAPIで情報を取得するプログラムの過程で見つけたので、API取得の流れになっています)

#②文字列から辞書型への変換(2つ目-jsonデータの場合)
import requests
sample2 = requests.get('https://api.bitflyer.jp/v1/ticker?product_code=BTC_JPY')
sample2_json = sample2.json()
print(type(sample2_json))
print(sample2_json)

戻り値は以下になります。

{'product_code': 'BTC_JPY', 'timestamp': '2018-06-25T13:16:49.31', 'tick_id': 4885765, 'best_bid': 673201.0, 'best_ask': 673501.0, 'best_bid_size': 0.90450026, 'best_ask_size': 0.3, 'total_bid_depth': 1253.98019556, 'total_ask_depth': 2060.60668785, 'ltp': 673201.0, 'volume': 372440.13561028, 'volume_by_product': 8332.60330008}

APIから取得した情報がJson形式のため、それをrequestsモジュールのResponseオブジェクト.json()関数で、取得したJsonデータをデコードする(読み取る)というものです。ちなみにレスポンスがJsonデータかどうかは、Responseオブジェクト.headers属性の'Content-type'で知ることができます。前提としては、APIから取得したJson形式のデータがそもそも辞書型の表記である必要があるという点が注意点です。今回の発見は以上です。参考になれば幸いです。

主要参考サイトは以下になります。