環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonの辞書はタプルをキーにとれる(一つの値に複数のキーがとれるように見える)

最終更新日 2019.11.27

Python の辞書はペアが集まったもので、そのペアは一般的に「文字列:なにか」ですが、辞書のキーをタプルにすることもできます。

d = {('iPhone', 'Mac'): 'Apple', ('Windows', 'XBOX'): 'Microsoft'}

v1 = d[('iPhone', 'Mac')]
v2 = d[('Windows', 'XBOX')]

print(v1)  # Apple
print(v2)  # Microsoft

Python の辞書は JavaScript の JSON と根本的に違います。('iPhone', 'Mac') というタプルから Apple という値を取得していますが、下のコードを見たらさらに驚くでしょう。

d = {('iPhone', 'Mac'): 'Apple', ('Windows', 'XBOX'): 'Microsoft'}

v1 = d['iPhone', 'Mac']

print(v1)  # Apple

タプルの丸かっこをはずしても値が取れています。Python は本当にフレキシブルなプログラミング言語です。これだけを見ると、Python の辞書は複数のキーをとれると考えてしまいますが、そうではありません。

d = {('iPhone', 'Mac'): 'Apple', ('Windows', 'XBOX'): 'Microsoft'}

v1 = d['iPhone']

print(v1)  # KeyError: 'iPhone'

iPhone から Apple を得ることはできません。つまり「複数のキーがとれる」わけでなく、「複数の要素をまとめてキーにできる」にすぎないのです。そしてその「まとめて」の形がタプルというわけです。