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

**URL:** <https://tech-share.ims.ac.jp/t/topic/123>\
**Category:** 情報系技術\
**Tags:** python3\
**Created:** [2024 年 3 月 5 日午前 12:45 UTC](https://tech-share.ims.ac.jp/t/topic/123 "2024-03-05T00:45:11Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![snaito](https://tech-share.ims.ac.jp/user_avatar/tech-share.ims.ac.jp/snaito/32/31_2.png) [@snaito](https://tech-share.ims.ac.jp/u/snaito)\
**Post date:** [2024 年 3 月 5 日午前 12:45 UTC](https://tech-share.ims.ac.jp/t/topic/123/1 "2024-03-05T00:45:11Z")

</div>

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モジュールを  
使用している。

```auto
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モジュールのデータフレームに  
変換している。
