Dictionaryの基本
いわゆるKey-Valueのことを”Mapping”と呼ぶ。
PythonのDictionaryはハッシュで実現されている。
キーにはハッシュ可能オブジェクトを指定可能。ハッシュ可能=更新不可、という意味ではない。
例えばオブジェクトのインスタンスのように中身が変わっても枠が変わらなければOK。
1 2 3 4 |
rgbs = { (255,0,0): 'red', (0,255,0): 'green', (0,0,255): 'blue' |
キーは重複不可。同じキーを登録すると前のKeyValueが上書きされる。
1 2 3 4 5 6 7 |
kv = { 'hoge': 100, 'fuga': 200 } print(kv) # {'hoge': 100, 'fuga': 200} kv['hoge'] = 300 print(kv) # {'hoge': 300, 'fuga': 200} |
DictionaryのCRUD
1 2 3 4 5 6 7 8 9 10 |
d = {'hoge':100,'fuga':200} # Create print(d['hoge']) # Read d['hoge'] = 300 # Update del d['hoge'] # Delete d2 = dict([(1,'hoge'),(2,'fuga')]) print(d2) # {1: 'hoge', 2: 'fuga'} d3 = dict(hoge1='hoge1',hoge2='hoge2',hoge3='hoge3') print(d3) # {'hoge1': 'hoge1', 'hoge2': 'hoge2', 'hoge3': 'hoge3'} |
辞書内包
List,Tupleと同様に内包式を書ける。
1 2 3 4 5 6 |
s = ["Hoge1","Hoge2","Hoge3"] k1 = {} for v in s: k1[v] = v.lower() k2 ={v.lower() for v in s} |
Operator
Dictionaryに対する演算。
1 2 3 4 |
d = {"hoge":100} print('hoge' in d) # True print('fuga' not in d) # True print(len(d)) # 1 |
iteration中に別のkeyへのアクセスは不可
こういうことは避けるべきだけれども、実際にやるとRuntimeエラー。
1 2 3 |
d = {'hoge1':100,'hoge2':200,'hoge3':300} for key in d: d['hoge4'] = 500 # RuntimeError: dictionary changed size during iteration |
ViewObject
キーの集合、値の集合を参照するためのデータ構造。
Viewというからには、Dictionary内に含まれる実体を参照している。
ViewObjectは集合演算をサポートしている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
d = {'hoge1':100,'hoge2':200,'hoge3':300} view1 = d.keys() for key in view1: print(key) # hoge1 hoge2 hoge3 del d['hoge2'] for key in view1: print(key) # hoge1 hoge3 view_x = view1 - ['hoge1','hoge2'] print(view_x) # {'hoge3'} view2 = d.values() for value in view2: print(value) # 100 200 300 |