2021-03-27に投稿

Python マッピング型 dict

Pythonの組み込みマッピング型(辞書)dictの説明です。

dictの定義

d1 = {'a':1, 'b':2, 'c':3}
d2 = {chr(x+97): x+1 for x in range(3)}
d3 = dict(a=1, b=2, c=3)
d4 = dict((('a', 1), ('b', 2), ('c', 3)))
d5 = dict((('a', 1), ('b', 2)), c=3)
d6 = dict({('a', 1), ('b', 2), ('c', 3)})
d7 = dict({('a', 1), ('b', 2)}, c=3)
d8 = dict(zip(['a', 'b', 'c'], [1, 2, 3]))
d9 = dict({'a':1, 'b':2, 'c':3})

要素の取得と設定

d = {'a':1, 'b':2, 'c':3}
d['b'] # => 2
d['d'] = 4
d['d'] # => 4
d['e'] # => KeyError: 'e'

要素の取得

d = {'a':1, 'b':2, 'c':3}
d.get('b') # => 2
d.get('X') # => None
d.get('X', 0) # => 0

要素の削除

d = {'a':1, 'b':2, 'c':3}
del d['b']
d #=> {'a': 1, 'c': 3}

forでの繰り返し

d = {'a':1, 'b':2, 'c':3}
for k in d:
    print(k) #=> a b c

for k in iter(d):
    print(k) #=> a b c

for k in iter(d.keys()):
    print(k) #=> a b c

for k, v in d.items():
    print(k, v) #=> a 1 b 2 c 3

値のイテレータ

d = {'a':1, 'b':2, 'c':3}
d.values() # => dict_values([1, 2, 3])
for v in d.values():
    print(v) #=> 1 2 3

キーの存在判定

d = {'a':1, 'b':2, 'c':3}
'b' in d # => True
'X' not in d # => True

値の設定

d = {'a':1, 'b':2, 'c':3}

d.setdefault('a') # => 1
d # => {'a': 1, 'b': 2, 'c': 3}
d.setdefault('b', 20) # => 2
d # => {'a': 1, 'b': 2, 'c': 3}
d.setdefault('d', 40) # => 40
d # => {'a': 1, 'b': 2, 'c': 3, 'd': 40}

辞書の更新

d = {'a':1, 'b':2, 'c':3}
d.update(a=10,b=20)
d # => {'a': 10, 'b': 20, 'c': 3}
d.update([('a', 100), ('d', 300)]) # => {'a': 100, 'b': 20, 'c': 3, 'd': 300}

キーの配列

d = {'a':1, 'b':2, 'c':3}
list(d) # => ['a', 'b', 'c']

要素のサイズ

d = {'a':1, 'b':2, 'c':3}
len(d) #=> 3

辞書の結合

d1 = {'a':1, 'b':2, 'c':3}
d2 = {'x':10, 'y':20}
d1 | d2 #=> {'a': 1, 'b': 2, 'c': 3, 'x': 10, 'y': 20}
d1 |= d2
d1 #=> {'a': 1, 'b': 2, 'c': 3, 'x': 10, 'y': 20}

キーが見つからない場合の挙動

dictを継承したクラスで__missing__を実装するとキーが見つからない場合の挙動を設定できる。

    def __missing__(self, key):
        return None

md = MyDict({'a':1, 'b':2, 'c':3})
md['b'] # => 2
md['d'] # => None

要素のクリア

d = {'a':1, 'b':2, 'c':3}
d.clear()
d # => {}

シャローコピー

d1 = {'a':1, 'b':2, 'c':3}
d2 = d1.copy()
d2 #=> {'a': 1, 'b': 2, 'c': 3}

キーから辞書を作成

dict.fromkeys(['a', 'b', 'c']) # => {'a': None, 'b': None, 'c': None}
dict.fromkeys(['a', 'b', 'c'], 0) # => {'a': 0, 'b': 0, 'c': 0}

要素の取り出し(キーと値)

d = {'a':1, 'b':2, 'c':3}
d.pop('a') # => 1
d # => {'b': 2, 'c': 3}
d.pop('X') # => KeyError: 'X'

第2引数でデフォルト値を指定すると要素がない場合もエラーとならない。

d = {'a':1, 'b':2, 'c':3}
d.pop('a') # => 1
d # => {'b': 2, 'c': 3}
d.pop('X', 0) # => 0
d # => {'b': 2, 'c': 3}

要素の取り出し(キーと値)

d = {'a':1, 'b':2, 'c':3}
d.popitem() # => ('c', 3)
k, v = d.popitem()
k # => 'b'
v # => 2
d.popitem() # => ('a', 1)
d.popitem() # => KeyError: 'popitem(): dictionary is empty'

逆順

d = {'a':1, 'b':2, 'c':3}

for k in reversed(d):
    print(k) #=> c b a
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント