1. TOP
  2. プログラム
  3. ソフト
  4. python
  5. pyton標準ライブラリー1

pyton標準ライブラリー1

get()

存在しないキーで辞書にアクセスしようとすると例外が生成される
get()関数ではオプションを指定する
python.get(Marx, 'Not a Python')

setdefault()

get()と似ているが、キーがなければさらに辞書に要素を追加される。
periodic_table = {"Hydrogen": 1, 'Helium':2}
print(periodic_table)
{'Hydrogen':1, 'Helium': 2}
キーがまだ辞書になければ、新しい価とともに辞書に追加される
carbon = periodic_table.setdefault('Carbon', 12)
Carbon
12
periodic_table
{'Hydrogen':1, 'Carbon': 12, 'Helium': 2, }

defaultdict()

例外を防ぐという点では似ているが、辞書作成時にあらゆる新しいキー
のためにあらかじめデフォルト値を設定する
引数は関数である。次の例だは、int関数を渡している。整数値 0 を返す
from collections import defaultdict
periodic_table = defaultdict(int)
これで、存在しないキーに対する値は整数(int)の0になる
periodic_table['Hydrogen'] = 1
periodic_table['Lead']
0
periodic_table
defaultdict(<class 'int'="">, {'Lead': 0, 'Hydrogen': 1})

次の例では

値が必要になったときにno_idea()が呼び出される
from collections import defaultdict

def no_idea():
return `Huh?`
bestiary = defaultdict(no_idea)
bestiary['A'] = 'Abominable Snowman'
bestiary['B'] = 'Basilisk'
bestiary['A']
'Abominable Snowman'
bestiary['B']
'Basilisk'
bestiary['C']

`Huh?`

int(),list(),dict()を使えば

これらの型の空の値を返して存在しないキーのデフォルト値にできる
init()は0を
list()は空リスト([])を
dict()は空辞書({})を返す。
デフォルト引数を省略すると、新しいキーに与えられるデフォルト値はNone`になる

lambdaを使うと

defaultdict()呼び出しのなかでデフォルト作成関数を定義できる
bestiary = defaultdict(lambda: 'Huh?')
bestiary('E')
'Huh?'

intは、独自カウンターを作れる

from collections import defaultdict
food_counter = defaultdict(int)
for food in ['spam', 'spam', `eggs`, `spam`]:
food_counter[food] += 1

for food, count in food_counter.item():
print(food.count)

eggs 1
spam 3

defaultdictではないとき

通常の辞書の場合、food_counter[food]は初期化されていないため、これを
初めてインクリメンタルしようとするたびにPythonは例外を発生している
余分な作業が必要になる
dict_counter = {}
for food in ['spam', 'spam', `eggs`, `spam`]:
if not food in dict_counter:
dict_counter[food] = 0
food_counter[food] += 1

for food, count in food_counter.item():
print(food.count)

eggs 1
spam 3