pythonで辞書を内包表記で作成するメモ書き

pythonで辞書を内包表記で作成するメモ書き。
元の辞書をAとし、そこの任意の1つのキーをBに代入するとする。
Aのキーはkey()で取り出すことができるので、全てのキーを取り出してBに代入for文は
for B in A.key()
と書ける。ここで新しく作る辞書をCとすると、単純にコピーするだけなら
C = {B: A[B] for B in A.key()}
となる。
ここで特定の条件式Xに合致した物だけをCの要素としたい場合は、
C = {B: A[B] if X for B in A.key()}
となる。
さらに特定の条件Xに合致した場合の値をD、合致しなかった場合の値をEとして
その両方をCの要素をする場合は
C = {B: D if X else E for B in A.key()}
となる。
サンプルとしてjsonファイルを読み込み、その値が日付だったらタイムゾーン情報を
消去してExcelファイルに書き出すプログラムを示す。下記のサンプルではpandasモジュールを
使用している。

-----------------------------------------------------------------------------
import pandas as pd
json_data = pd.read_json('sample.json')
json_data = pd.DataFrame({key: json_data[key].dt.tz_localize(None) \
              if pd.api.types.is_datetime64_any_dtype(json_data[key]) \
              else json_data[key] for key in json_data.keys()})
json_data.to_excel('sample.xlsx',index=False)
-----------------------------------------------------------------------------

となる。ここで“.dt.tz_localize(None)”は新規にタイムゾーン情報を設定する
関数で、タイムゾーンとして“None”を指定しタイムゾーンは無しと上書きする
事によって元々あったタイムゾーン情報を消去している。また
“pd.api.types.is_datetime64_any_dtype”はpandasモジュールにある日付かどうかを
判別する式である。pandasモジュールでは辞書のままではExcelにファイルへ書き出すことが
できないので、“pd.DataFrame”関数を使って辞書からpandasモジュールのデータフレームに
変換している。