Dictionary

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