辞書型 (dict)
辞書型は、他のプログラム言語では連想配列と呼ばれているもので、キーと値がペアになったものが一つの要素となっています。
辞書型は順序付けされていません。また、キーは重複しません。
値には色々なデータ型が入れられますが、キーは違います。
キーは何らかの変更不能な型になります。文字列、数値は常にキーにすることができます。タプルは、文字列、数値、その他のタプルのみを含む場合はキーにすることができます。
https://docs.python.org/ja/3/tutorial/datastructures.html#dictionaries
表記方法
波括弧{}で括って、その中にコロンで区切られたキーと値がワンセットになっていて、そのワンセットごとにカンマで区切ります。
{“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
初期化
空の辞書を作成。
a = {}
または
a = dict()
最初から要素を入れた辞書
a = {“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
要素へ追加
空の辞書を作り
a = {}
キーを指定して追加
a[“キー1”] = “値1”
a[“キー2”] = “値2”
重複しないので、すでにあるキーを指定した場合、上書きされる
a[“キー1”] = “値3”
結果、変数 a はこうなりました。
{‘キー1’: ‘値3’, ‘キー2’: ‘値2’}
要素へのアクセス
a = {“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
print(a[“キー1”])
結果
値1
キーを指定すると、値が得られます。
存在しないキーを指定するとエラーになります(KeyError)。
要素数取得
len関数が使えます。
a = {“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
print(len(a))
結果
3
ループ
forの変数にはキーが入ります。
値を取得するには、辞書変数[キー]で行います。
1 2 3 4 |
d = {"キー1":"値1","キー2":"値2","キー3":"値3"} # キーと値をループ for k in d: print(k,d[k]) |
キー1 値1
キー2 値2
キー3 値3
items(), keys(), values()メソッドを使用した場合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
d = {"キー1":"値1","キー2":"値2","キー3":"値3"} # キーと値をループ(itemsメソッド) for k, v in d.items(): print(k,v) # itemsメソッドの中身(dict_items型) print(d.items()) # キーをループ(keysメソッド) for k in d.keys(): print(k) # keysメソッドの中身(dict_keys型) print(d.keys()) # 値をループ(valuesメソッド) for v in d.values(): print(v) # valuesメソッドの中身(dict_values型) print(d.values()) |
キー1 値1
キー2 値2
キー3 値3
dict_items([(‘キー1’, ‘値1’), (‘キー2’, ‘値2’), (‘キー3’, ‘値3’)])
キー1
キー2
キー3
dict_keys([‘キー1’, ‘キー2’, ‘キー3’])
値1
値2
値3
dict_values([‘値1’, ‘値2’, ‘値3’])
dict_***という型はviewと呼ばれるタイプらしいです。ループのたびに次の値を返します。
in演算子
指定したキーまたは値が含まれているかどうかTrueかFalseを返します。
keysメソッドまたはvaluesメソッドで、一度キーのみ、または値のみにしておいてから、in演算子を使います。
キーの場合
a = {“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
print(“キー2” in a.keys())
結果
True
値の場合
a = {“キー1″:”値1″,”キー2″:”値2″,”キー3″:”値3”}
print(“値3” in a.values())
結果
True
集合型(set)
集合型は、順番を保持しないで、重複も無いデータの集まりです。集合の演算もできます。
空の集合を生成
a = set()
表記方法
波括弧{}で括ってデータごとにカンマで区切ります。
{1,2,3}
キャストして生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#リストをキャスト a = [1, 2, 3, 3, 3] print(type(a))#<class 'list'> b = set(a) print(b)#{1, 2, 3} 重複しないで生成される print(type(b))#<class 'set'> #タプルをキャスト a = (1, 2, 3, 3, 3) print(type(a))#<class 'tuple'> b = set(a) print(b)#{1, 2, 3} 重複しないで生成される print(type(b))#<class 'set'> #辞書をキャスト(キーのみ) a = {"キー1":"値1","キー2":"値2","キー3":"値3"} print(type(a))#<class 'dict'> b = set(a) print(b)#{'キー2', 'キー3', 'キー1'} print(type(b))#<class 'set'> |
要素の追加
空の集合を作り
a = set()
追加
a.add(3.14)
a.add(1)
a.add(“文字”)
print(a)
結果
{1, 3.14, ‘文字’}
要素にアクセス
リストのようにインデックスで参照できません。
a = {‘apple’, ‘orange’, ‘banana’}
print(a[0])
エラーになる。
forを使って各要素にアクセスします。
1 2 3 |
a = {'apple', 'orange', 'banana'} for i in a: print(i) |
結果
orange
apple
banana
順番は適当になります。
集合の演算
記号(| & – ^ )を用いて、和集合、差集合、積集合などを簡単に求められます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
a = {1,2,3,4,5} b = {4,5,6,7,8} # 和 aまたはb print(a | b)#{1, 2, 3, 4, 5, 6, 7, 8} # 積 aかつb print(a & b)#{4, 5} # 差 aのみに含まれる print(a - b)#{1, 2, 3} # 差 bのみに含まれる print(b - a)#{8, 6, 7} # 対称差 aまたはb(aかつbは含まない) print(a ^ b)#{1, 2, 3, 6, 7, 8} |