我有一个脚本来查找列表中某个单词的计数
newm =[]
for i in range(0,len(alpha)-1):
newm.append (alpha[i][0])
print newm
#count for list
word_counter =[]
for word in newm:
print word
if word in word_counter:
word_counter[word] += 1
else:
word_counter[word] = 1
newm
生成:
['today', 'alpha', 'radiation', 'helium', 'work', 'charge', 'model', 'atom', 'discovery', 'interpretation', 'scattering', 'gold', 'foil', 'splitting', 'atom', 'reaction', 'nitrogen', 'alpha']
我想在列表newm中找到每个单词的计数但是它会给出错误:
TypeError: list indices must be integers, not str
我该如何解决?
答案 0 :(得分:2)
如何使用字典:
word_counter = {}
if word in word_counter:
word_counter[word] += 1
else:
word_counter[word] = 1
if/else
用于检查词典是否已包含该词。如果是,它将增加其相关值,如果不增加,则将值初始化为1。
而且,要了解有关您的代码无效的原因,请参阅more on lists。
如Ashwini Chaudhary所述,你也可以使用collections.Counter
,其目的是做这件事:
>>> # Tally occurrences of words in a list
>>> cnt = Counter()
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
... cnt[word] += 1
>>> cnt
Counter({'blue': 3, 'red': 2, 'green': 1})
这是一个如何直接从迭代中初始化它的例子:
>>> c = Counter(['eggs','ham'])
>>> c
Counter({'eggs': 1, 'ham': 1})
>>> c['bacon']
0
>>> c['ham']
1
答案 1 :(得分:0)
以下是使用defaultdict
的另一种解决方案。
In [23]: from collections import defaultdict
In [24]: data = ['a','b','c','a','b','b','d']
In [25]: counts = defaultdict(int)
In [26]: for x in data: counts[x]+=1
In [27]: counts
Out[27]: defaultdict(<type 'int'>, {'a': 2, 'c': 1, 'b': 3, 'd': 1})