我需要在文本中出现字母的出现。如果其中一个字母没有出现,它应该显示为零,并且输出也应按字母顺序排序。我准备了以下Python代码,我的问题是如何为非出现的字母显示零,以及如何根据列表键对列表值进行排序以对输出进行排序?
fdist = Counter(c for c in f.lower() if c.isalpha())
print sorted(fdist.items()) #only to show the output details
print fdist.values()
示例文本的输出如下:
[('a', 46), ('b', 5), ('c', 11), ('d', 22), ('e', 76), ('f', 13), ('g', 7), ('h', 29), ('i', 30), ('j', 1), ('k', 6), ('l', 21), ('m', 11), ('n', 34), ('o', 31), ('p', 6), ('q', 1), ('r', 24), ('s', 32), ('t', 52), ('u', 7), ('v', 2), ('w', 10), ('y', 11)]
[46, 11, 5, 76, 22, 7, 13, 30, 29, 6, 1, 11, 21, 31, 34, 1, 6, 32, 24, 7, 52, 10, 2, 11]
但输出应如下所示:
[46, 5, 11, 22, 76, 13, 7, 29, 46, 1, 6, 21, 11, 34, 31, 6, 1, 24, 32, 52, 7, 2, 10, 0, 11, 0]
答案 0 :(得分:2)
这样的东西(暂时忽略排序部分)?
import string
result = [fdist.get(l, 0) for l in string.letters]
或
result = [fdist.get(l, 0) for l in string.ascii_lowercase]
因为你只处理小写字符
答案 1 :(得分:1)
注意@astrognocci答案更简单,更优雅,但这也有效。
使用字母键创建计数器(但最初设置为零)
import string
fdist = Counter([f for f in string.ascii_lowercase])
for c in string.ascii_lowercase:
fdist[c] = 0
sorted(fdist.items())
返回排序列表,它不会对项目进行排序。您可以创建排序列表的副本,然后使用排序列表,如下所示;
x = sorted(fdist.items())
print x.values()
或者您可以对列表fdist
进行排序;
fdist.items().sort()
print fdist.values()
答案 2 :(得分:0)
#!python
import string
from collections import Counter
fdist = Counter(string.lowercase)
for k in fdist.keys():
fdist[k] = 0
# process your data:
for c in f:
if c.isalpha():
fdist.update(c.lower())
# print it
print [fdist[k] for k in sorted(fdist.keys())]
答案 3 :(得分:0)
输出不包含零项。也许您应该再次查看Counter
函数,以便生成计数为零的项目;那么实施@ danodonovan的解决方案就足够了。
from string import ascii.lowercase as letters
fdist = [(letter, 0) for letter in letters]
然后根据需要进行更新并使用
打印已排序的列表result = [entry[1] for entry in fdist]
这足以将正确的值放在result
。