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 を得ることはできません。つまり「複数のキーがとれる」わけでなく、「複数の要素をまとめてキーにできる」にすぎないのです。そしてその「まとめて」の形がタプルというわけです。