Pythonで辞書を作成するには幾つかの方法がある。それらの方法と辞書を作成する際に注意する点を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
# 波かっこを使う
d = {} # 空の辞書
print(d) # {}
d = {'key0': 0, 'key1': 1}
print(d) # {'key0': 1, 'key1': 1}
# キーにはハッシュ可能なオブジェクトとしなければならない
key = [0, 1, 2] # リストはハッシュ不可能
value = 102
d = {key: value} # TypeError
key = (0, 1, 2) # このタプルはハッシュ可能
d = {key: value} # OK
print(d) # {(0, 1, 2): 102}
key = ([0, 1, 2], 3, 4) # このタプルはハッシュ不可能
d = {key: value} # TypeError
# dict関数を使う
d = dict() # 空の辞書
print(d) # {}
# dict関数にキーワード引数を指定する
d = dict(key0=0, key1=1)
print(d) # {'key0': 0, 'key1': 1}
# Pythonのマッピング型(辞書的なオブジェクト)を指定する
d2 = dict({'value2': 2, 'value3': 3})
print(d2) # {'value2': 2, 'value3': 3}
# dict関数に2要素の反復可能オブジェクトを要素とする反復可能オブジェクトを渡す
l0 = ['key0', 0]
t0 = ('key1', 1)
l1 = [l0, t0]
print(l1) # [['key0', 0], ('key1', 1)]
d = dict(l1)
print(d) # {'key0': 0, 'key1': 1}
# 内包表記を使う方法
d = {f'key{x}': x for x in range(2)}
print(d) # {'key0': 0, 'key1': 1}
Pythonにおける辞書とは「キー」と「値」の組を0個以上含むオブジェクトのことで、その要素(キーと値の組)は「{キー: 値}」のようにキーとそのキーに対応する値をコロンで区切ったものを波かっこ「{}」で囲んで表現される。
辞書を作成するには幾つかの方法がある。
以下ではこれらの方法を紹介する。
波かっこ「{}」を使って辞書を作成するには、キーと値の組をコロンで区切ったものを0個以上波かっこの中に記述する。キーと値の組が複数あるときには、それらをカンマで区切る。
以下に例を示す。
d = {} # 空の辞書
print(d) # {}
d = {'key0': 0, 'key1': 1}
print(d) # {'key0': 1, 'key1': 1}
最初の例は波かっこのみで、キーと値の組がない。この場合は要素(キーと値の組)を持たない空の辞書が作成される。
次の例では、'key0'という文字列キーとその値「0」、'key1'という文字列キーとその値「1」を格納する辞書を作成している。
注意が必要なのは、辞書のキーはハッシュ可能でなければならないことだ。文字列や数値はハッシュ可能だが、リストや集合はハッシュ可能ではない(要素が変更されることのないfrozensetはハッシュ可能)。タプルはその要素を変更できないが、タプルの要素の要素が変更可能な場合にはハッシュ可能ではない(リストを格納するタプルはハッシュ不可能)。
以下に例を示す。
key = [0, 1, 2] # リストはハッシュ不可能
value = 102
d = {key: value} # TypeError
この例では、整数を要素とするリストをキーとして辞書を作成しようとしている。しかし、リストはハッシュ可能ではないので、これをキーとすることはできない。そのため、辞書を作成しようとしたところでTypeError例外が発生する。
一方、以下の例では整数を要素とするタプルをキーにしようとしている。
key = (0, 1, 2) # このタプルはハッシュ可能
d = {key: value} # OK
print(d) # {(0, 1, 2): 102}
整数はハッシュ可能であり、これを要素とするタプルもハッシュ可能なので、これはキーとして使用できる。そのため、問題なく辞書を作成できる。
ハッシュ可能でないリストを要素とするタプルをキーにしようとするとどうなるだろう。
key = ([0, 1, 2], 3, 4) # このタプルはハッシュ不可能
d = {key: value} # TypeError
この場合は、やはり、辞書を作成しようとしたところでTypeError例外が発生する。
Copyright© Digital Advantage Corp. All Rights Reserved.