用字典计算字母频率

counting letter frequency with a dict

我正在尝试查找没有 Counter.And 的字母的频率代码将输出字典形式的结果。到目前为止我所做的是让程序计算单词频率而不是 letter/character 频率。如果有人能指出我在此代码中的错误,那就太好了。谢谢你。 它应该看起来像这样:

{'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

这是正确的代码:

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 循环来遍历每个单词中的字母。

这是否可以接受:

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

使用collections.Counter

from collections import Counter

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

如果你不想使用计数器,也可以自己计算元素。

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