python - 對(duì)出現(xiàn)字符串的計(jì)數(shù),四種方法,第三種不知道怎么不行
問(wèn)題描述
import osimport jsonos.chdir('F:pydata-book-masterch02')path=’usagov_bitly_data2012-03-16-1331923249.txt’open(path).readline()records=[json.loads(line) for line in open(path) ]time_zones=[rec[’tz’] for rec in records if ’tz’ in rec]# method1def get_counts(sequence): counts={} for x in sequence:if x in counts: print(x) print(counts) counts[x]+=1else: counts[x]=1 return counts######################################## method2from collections import defaultdictdef get_counts2(sequence): counts=defaultdict(int) for x in sequence:counts[x]+=1 return countsprint(get_counts2(time_zones))########################################### method3from collections import defaultdictdef get_counts2(sequence): counts={} for x in sequence:counts[x]+=1 return countsprint(get_counts2(time_zones))########################################### method4from collections import Countercounts=Counter(time_zones)print(counts)# error of method3---------------------------------------------------------------------------KeyError Traceback (most recent call last)<ipython-input-7-cce65f8fc4d0> in <module>() 40 counts[x]+=1 41 return counts---> 42 print(get_counts2(time_zones)) 43 44 ##########################################<ipython-input-7-cce65f8fc4d0> in get_counts2(sequence) 38 counts={} 39 for x in sequence:---> 40 counts[x]+=1 41 return counts 42 print(get_counts2(time_zones))KeyError: ’America/New_York’
問(wèn)題解答
回答1:method3中的用法, 觸發(fā)了KeyError異常, 因?yàn)槟阍跊](méi)有初始化值的情況下, 直接就counts[x]+=1, 這樣它壓根找到之前沒(méi)定義過(guò)的key, 就更別說(shuō)+1, 你只是import defaultdict, 卻沒(méi)用上, 導(dǎo)致實(shí)際上邏輯和method1一樣, 所以,解決的方法,就是method1
