我试图在没有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
答案 0 :(得分:3)
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