あるリストを頻度順にカウントすることが多かったのだけど、
いままで頑張ってたことが一瞬で済む方法。
dafaultdictを使うとvalueのデフォルト値を指定できる。
例えばゼロ(つまりint)とか。
そうすると、いままでこう書いてたものが、
#! /usr/bin/env python # -*- coding: utf-8 -*- fruit = ['strawberry','grape','orange','strawberry','grape'] dict = {} for f in fruit: if f in dict.keys(): #キーが初回登録時と2回目以降で場合分けする val = dict[f] val += 1 dict[f] = val else: dict[f] = 1 print sorted(dict.items(),key=lambda x:x[1], reverse=True)
これで書ける。
#! /usr/bin/env python # -*- coding: utf-8 -*- from collections import defaultdict fruit = ['strawberry','grape','orange','strawberry','grape'] d = defaultdict(int) for f in fruit: d[f] += 1 #デフォルト値がintで初期化されているのでインクリメントできる print sorted(d, key = lambda x:x[1], reverse=True)
便利です。