而不是使用:
counter[i] = counter.get(i, 0) + 1
你也可以试试collections.defaultdict:
counter = defaultdict(int)
所以你的最终版本应该是这样的:
import urllib2
from collections import defaultdict
f=urllib2.urlopen("http://www.mbnet.com.pl/dl.txt")
list = range(1,50)
counter=defaultdict(int) # use defaultdict here
for lines in f:
tab_lines=lines.split(" ")
formated_tab=tab_lines[-1].strip().split(',')
for i in formated_tab:
if int(i) in list:
counter[i] += 1 # don't worry, be happy :)
sumall=sum(counter.values())
for number, value in counter.items():
print ('Number {} drawn {} times and it is {}% of all').format(number,value,100*value/sumall)
我会给你一个例子来展示collections.defaultdict在这里做了什么:
>>> from collections import defauldict
>>> a = {}
>>> a['notexist']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'notexist'
>>> b = defaultdict(int)
>>> b['notexist']
0
class collections.defaultdict([default_factory[, ...]])
defaultdict 是内置 dict 类的子类,所以不要害怕,但你可以用它做更多事情。一旦你指定了default_factory 变量,当key 不存在时,defaultdict 会根据default_factory 为你提供一个。请注意,只有在您使用 dict['key'] 或 dict.__getitem__(key) 时才会发生这种魔法。
doucumetaion 在这里:collections.defaultdict