辞書アンパックが「本領発揮」する瞬間
単なる辞書同士のマージなら他の方法もありますが、「その場で加工しながら展開する」 とき、この書き方は最強の武器になります。
【Before】普通に書くとこうなる(ちょっと冗長)
リスト形式のデータを辞書に変換して、さらに特定の値と合体させる場合、どうしても手順が増えてしまいます。
# 元データ(APIレスポンスなどのイメージ)
json_data = {"result": [{"name": "設計", "count": 3}, {"name": "開発", "count": 8}]}
date = "2026-03-03"
# 1. まずベースを作る
data = {"date": date}
# 2. ループを回して一つずつ追加する
for r in json_data["result"]:
data[r["name"]] = r["count"]
print(data)
# {'date': '2026-03-03', '設計': 3, '開発': 8}
【After】辞書アンパック × 内包表記
「データの加工」と「マージ」を {} の中で同時に行います。
data = {
"date": date,
# 内包表記で作った辞書を、** でバラしてここに展開!
**{r["name"]: r["count"] for r in json_data.get("result", [])}
}
ここが「本領発揮」ポイント!
1. 「何を作ろうとしているか」が一行目でわかる
Beforeの書き方だと、最後までコードを読まないと data の全貌が見えません。
Afterなら、
「この辞書は date と、あとの可変データで構成されているんだな」
と一瞬で理解できます。
2. 中間変数(ゴミ)が出ない
Beforeだと、ループ用の変数や一時的なリストが必要になることがありますが、この書き方なら一発で完成形が作れます。
3. get() メソッドとの相性が抜群
もし json_data に "result" というキーがなかった場合、通常の json_data["result"] だとエラー(KeyError)で止まってしまいますが、.get("result", []) なら安全に空の辞書として処理されます。
まとめ
今回紹介した「辞書アンパック()」と「辞書内包表記」の組み合わせは、Pythonらしい「簡潔で読みやすいコード」**を書くための強力なテクニックです。
- update() を使わずに、辞書の定義と同時にマージできる
- 内包表記を使えば、リストからのデータ加工もその場で完結する
- 「何を作ろうとしているか」が一目でわかるコードになる
ぜひ皆さんも、日々のデータ整形やAPIレスポンスの処理で「本領発揮」させてみてください!