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