在列表中查找计数的代码会生成错误

时间:2013-08-18 13:41:56

标签: python count

我有一个脚本来查找列表中某个单词的计数

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

我该如何解决?

2 个答案:

答案 0 :(得分:2)

如何使用字典:

word_counter = {}

if word in word_counter:
    word_counter[word] += 1
else:
    word_counter[word] = 1

if/else用于检查词典是否已包含该词。如果是,它将增加其相关值,如果不增加,则将值初始化为1。

Python dictionaries

而且,要了解有关您的代码无效的原因,请参阅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

示例来自:collections: Counter Objects

答案 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})