23
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonでdictからデフォルト値指定をしつつ値を取得する

Last updated at Posted at 2017-07-27

すぐ忘れちゃうのでメモ。

dict インスタンスからキーを指定して値を取り出すときに、

  • もしかしたらこの辞書にはこのキーが設定されない場合があるかも、とか
  • KeyError は撲滅しておきたいな、とか

思ったら get メソッドを利用するのが吉。

>>> d = {"a": 1, "b": 2} 

>>> d["c"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'c'

>>> d.get("c") # default を指定しないと None が返る

>>> d.get("c", 3) # default を指定すればその値が返る
3

>>> 

うれしいのは get(key[, default]) とデフォルト値を指定できるようになっていること。
なので、以下のようなものはすべて get ですんなり書ける。

>>> c = d["c"] if "c" in d else 3
>>> c
3

>>> c = d["c"] if d.has_key("c") else 3
>>> c
3

# 上のやつらは get の default 指定ですっきり書ける
>>> c = d.get("c", 3)
>>> c
3

さらに、 きれいに書くために defaultdict を import していた以下のような処理も get で書ける。
が、 defaultdict 使った方がよりきれいに書けるので可読性あげたいときは defaultdict 使うべき。

>>> from collections import defaultdict
>>> dd = defaultdict(int, d)
>>> dd
defaultdict(<type 'int'>, {'a': 1, 'b': 2})

>>> dd["c"] += 1  # 存在しないキーに +=1 をしてもエラーにならず int のデフォルト値0の設定が暗黙的に行われる
>>> dd["c"]
1

# get を使えば defaultdict を使わなくても書ける
>>> d  
{'a': 1, 'b': 2}

>>> d["c"] = d.get("c", 0) + 1 # 存在しないキーからデフォルト値0を取得して +1 する
>>> d["c"]
1
23
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?