python実践認定試験に向けて勉強した内容を共有したいと思います。
受験をする際は是非参考にしてください。
defaultdict-デフォルト値を持った辞書
通常の辞書は存在しないキーを参照するとKeyErrorが発生します。
defaultdictは存在しないキーを参照した時にデフォルト値が返されます。
コード解説
from collections import defaultdict
def value():
return 'default-value'
d = defaultdict(value, spam=100)
con = d['ham']
print(con) # 存在しないキーを投げるとデフォルト値が返る
con = d['spam']
print(con)
実行後は下記の画像のようになります。
default_factory引数にintを指定するとデフォルト値が0になります。
同様にlist,dict,setを指定すると空のリスト、辞書、セットがデフォルト値となります。
コード解説
from collections import defaultdict
d_int = defaultdict(int)
con = d_int['ham'] # 存在しない場合は0をデフォルトで返す。
print(con)
d_int['ham'] += 1
con = d_int['ham']
print(con)
d_list = defaultdict(list)
d_list['a']
con = d_list['a']
print(con)
# appendで追加していく。
d_list['a'].append('b')
d_list['a'].append('c')
d_list['a'].append('a')
print(d_list['a'])
defaultdictの活用方法はデータをまとめる時などに使用します。
コード解説
from collections import defaultdict
detaset = [('野球', '大谷選手'),('サッカー', '久保選手'), ('野球', '村上様'), ('野球', '吉田選手'), ('サッカー', '長友選手')]
data_list = defaultdict(list)
for category, name in detaset:
data_list[category].append(name)
print(list(data_list.items()))
itemgetter()関数→リストやタプルのソートに使う要素をインデックス値で指定できる。
インデックスを見てタプルを並び替える。
コード解説
from operator import itemgetter
data = [(1, 40, 200), (3, 10, 100), (2, 20, 300), (1, 30, 300)]
print(sorted(data)) # キーを指定しないでソート
print(sorted(data, key=itemgetter(2))) #インデックス2でソートをしてそれ以外は元の順番を保つ
print(sorted(data, key=itemgetter(2, 0))) # 最初はインデックス2でソートし数値が同じ場合はインデックス0でソートする。