您的位置:首页技术文章
文章详情页

python - 对出现字符串的计数,四种方法,第三种不知道怎么不行

【字号: 日期:2022-07-15 18:37:26浏览:65作者:猪猪

问题描述

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’

问题解答

回答1:

method3中的用法, 触发了KeyError异常, 因为你在没有初始化值的情况下, 直接就counts[x]+=1, 这样它压根找到之前没定义过的key, 就更别说+1, 你只是import defaultdict, 却没用上, 导致实际上逻辑和method1一样, 所以,解决的方法,就是method1

标签: Python 编程