2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの辞書はJavaScriptのように分割代入できない

Last updated at Posted at 2025-09-30

環境

  • Python 3.13

はじめに

Pythonで開発している時に、手ぐせでの書き方でバグを生み出していたので  
戒めも兼ねての備忘録です。

オブジェクトの分割代入

JavaScriptでのオブジェクトの分割代入便利ですよね。
Reactでpropsを渡す際にも、よく使うイメージです。

const {sub, body} = {sub: "件名", body: "本文"}

console.log(sub)
console.log(body)
// 件名
// 本文

辞書型の分割代入もどき

Pythonの辞書もオブジェクトと似てるし、分割代入できるでしょ!のノリで、
pylintも怒らず、やっぱ使えるのだなと意気揚々と書いていました。

sub, body = {"sub": "件名", "body": "本文"}

念のためテストで実行してみると、
値ではなく、キー名が入っており想定とは異なる結果でした。

print(sub)
print(body)
# sub
# body

調べてみると、辞書のキーがイテレータとして展開されるとのことで
Pythonの辞書型でもそれっぽい書き方はできますが、
キー名が入ってしまうので気をつけましょう。。。

おまけ

どうしても、辞書の値を分割代入をしたい際の一例は下記となります。
読みやすいかと言われると、微妙なので個人的には使わなさそうな気もします。

sub, body =  ({"sub": "件名", "body": "本文"}.get(val) for val in ("sub", "body"))

print(sub)
print(body)
# 件名
# 本文

2025/10/01 追記

コメントにて、よりシンプルな書き方を共有いただいたので追記します。

values()を利用すれば、読みやすく代入が行えます。
for文と一緒に利用するイメージが強く、盲点でした。

sub, body =  {"sub": "件名", "body": "本文"}.values()

print(sub)
print(body)
# 件名
# 本文

また同じように、
items()、keys()を使った場合には、対応した値が代入されます。

sub, body =  {"sub": "件名", "body": "本文"}.items()

print(sub)
print(body)
# ('sub', '件名')
# ('body', '本文')

sub, body =  {"sub": "件名", "body": "本文"}.keys()

print(sub)
print(body)
# sub
# body

参考

2
1
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?