(番外編)Python Coding Reference — 3. dictionary(辞書) —

辞書の作成

{}で括ったリテラル文字列で作成

dicta = {'id':1, 'code':'a', 'val':'あ'}
print(dicta)

dict型コンストラクタでの作成

dictb = dict(id=2, code='b', val='い')
print(dictb)

組合わせのリストから作成

dictc = dict([('id', 3), ('code', 'c'), ('val', 'う')])
print(dictc)

キーと値のリストを組み合わせて作成

dictd = dict(zip(['id', 'code', 'val'], [4, 'd', 'え']))
print(dictd)

値追加

dictd.setdefault('desc', 'test-value')
print(dictd)

辞書の検索

キー値に対する値の取得

dicta = {'id':1, 'code':'a', 'val':'あ'}
print(dicta['id'])
==> 1
print(dicta['code'])
==> a
print(dicta['val'])
==> あ
print(dicta['idx'])
==> KeyError: 'idx'

値の存在チェック(values)

print(1 in dicta.values())
==> True

キー値の存在チェック(in)

print('id' in dicta)
==> True
print('id' in dicta.keys())
==> True

itemsを使ったキー・値の存在チェック

print(('id', 1) in dicta.items())
==> True
※キーと値の組合わせのタプルで比較する。
print(('val', 1) in dicta.items())
==> False
print(('id', 9) in dicta.items())
==> False

getメソッドでの検索

print(dicta.get('val'))
==> あ
print(dicta.get('valx'))
==> None

forループでの値の取得

for k, v in dicta.items():
    print('key:{} val:{}'.format(k, v))

最大・最小値とそのキー値の取得

dictv = {'k1':100, 'k2':120, 'k3':20, 'k4':10, 'k5':99}
print(max(dictv.values()))
==> 120
print(min(dictv.values()))
==> 10

辞書の加工・編集

要素の追加

dicta = {'id':1, 'code':'a', 'val':'あ'}
dicta['addkey'] = 999
print(dicta)
==> {'id': 1, 'code': 'a', 'val': 'あ', 'addkey': 999}

辞書の連結

dicta = {'id':1, 'code':'a', 'val':'あ'}
dictz = {'key':0, 'val1': 'XXX', 'val2':999}
dicta.update(dictz)
==> {'id': 1, 'code': 'a', 'val': 'あ', 'key': 0, 'val1': 'XXX', 'val2': 999}
※キーが存在しなければ追加される
dictb = dict(id=2, code='b', val='い')
dicta.update(dictb)
==> {'id': 2, 'code': 'b', 'val': 'い', 'key': 0, 'val1': 'XXX', 'val2': 999}
※キーが重複する箇所の値は上書きされる

要素の削除(pop)

dicta = {'id':1, 'code':'a', 'val':'あ'}
dicta.pop('val')
==> 'あ'
print(dicta)
==> {'id': 1, 'code': 'a'}
※第2引数を与えると、キーが存在しない場合に指定値を戻す(削除できたかどうかの確認に使用)
dicta.pop('valx', 'XXX')
==> 'XXX'
print(dicta)
==> {'id': 1, 'code': 'a'}

要素の削除(popitem)

dicta = {'id':1, 'code':'a', 'val':'あ'}
dicta.popitem()
==> ('val', 'あ')
dicta.popitem()
==> ('code', 'a')
k, v = dicta.popitem()
print(k, v)
==> id 1
※削除したキー・値の組合わせをタプルで戻す
※引数は指定できない。削除対象となる辞書のキーは指定できない

要素の削除(clear)

dicta = {'id':1, 'code':'a', 'val':'あ'}
dicta.clear()
print(dicta)
==> {}

要素の削除(del)

dicta = {'id':1, 'code':'a', 'val':'あ'}
del dicta['val']
print(dicta)
==> {'id': 1, 'code': 'a'}

集合演算(和集合)

dicta = {'id':1, 'code':'a', 'val':'あ'}
dictb = {'key1': 1, 'key2': 2, 'val': 9}
print(dicta.keys() | dictb.keys())
==> {'key1', 'val', 'key2', 'code', 'id'}
print(dicta.items() | dictb.items())
==> {('key2', 2), ('val', 'あ'), ('key1', 1), ('val', 9), ('id', 1), ('code', 'a')}
※同一名のキーが存在していても両方表示される

集合演算(差集合)

print(dicta.keys() ^ dictb.keys())
==> {'key1', 'key2', 'code', 'id'}
print(dicta.items() ^ dictb.items())
==> {('key2', 2), ('val', 'あ'), ('key1', 1), ('val', 9), ('id', 1), ('code', 'a')}

Posted by tfurukaw