用字典统计字母频率

时间:2017-09-29 10:02:14

标签: python-3.x word-frequency

我试图在没有Counter的情况下找到字母的频率。代码将输出结果的字典形式。到目前为止我所做的是让程序计算单词频率而不是字母/字符频率。如果有人能指出我在这段代码中的错误,那就太棒了。谢谢。 它应该看起来像这样:

{'a':2,'b':1,'c':1,'d':1,'z':1}

**但这是我实际得到的:

{'abc':1,'az':1,'ed':1}

**我的代码在

之下
word_list=['abc','az','ed']
def count_letter_frequency(word_list):
  letter_frequency={}
  for word in word_list:
    keys=letter_frequency.keys()
    if word in keys:
        letter_frequency[word]+=1
    else:
        letter_frequency[word]=1
  return letter_frequency

3 个答案:

答案 0 :(得分:3)

使用collections.Counter

from collections import Counter

print Counter(''.join(word_list))
# Counter({'a': 2, 'c': 1, 'b': 1, 'e': 1, 'd': 1, 'z': 1})

如果您不想使用Counter,请自行计算元素。

from collections import defaultdict

d = defaultdict(int)
for c in ''.join(word_list):
    d[c] += 1
print d
# defaultdict(<type 'int'>, {'a': 2, 'c': 1, 'b': 1, 'e': 1, 'd': 1, 'z': 1})

答案 1 :(得分:0)

这是正确的代码:

word_list=['abc','az','ed']

def count_letter_frequency(word_list):
  letter_frequency={}
  for word in word_list:
    for letter in word:
      keys=letter_frequency.keys()
      if letter in keys:
          letter_frequency[letter]+=1
      else:
          letter_frequency[letter]=1
  return letter_frequency

您在列表上进行迭代,列表中包含单词。所以,你在字典中将单词作为键。因此,您必须添加另一个for循环来迭代每个单词中的字母。

答案 2 :(得分:0)

这是否可以接受:

flat = ''.join(word_list)
{l: flat.count(l) for l in set(flat)}
#{'a': 2, 'b': 1, 'c': 1, 'd': 1, 'e': 1, 'z': 1}

如果您希望在for循环中使用此功能,请执行以下操作:

flat = ''.join(word_list)
result = {}
for l in flat:
    if l in result:
        result[l] += 1
    else:
        result[l] = 1