2

我正在尝试计算字母出现次数并打印出来。这是我到目前为止所拥有的:

def histogram(L):
    d = {}
    for x in L:
      for letter in x:
        if letter in d:
          d[letter] += 1
        else:
          d[letter] = 1
    for i in range(len(d)):
      print('{} | {}'.format(d, d[i])) # GETTING ERRORS ON THIS LINE
    return d
histogram(open('cipher.txt'))

出于某种原因,我在那条线上遇到了错误。我将如何正确打印它?

编辑:解决我的Martijn!道具!但有谁知道如何按字母顺序对字典进行排序?

4

2 回答 2

6

d字典,不是列表。循环遍历键:

for key in d:
    print('{} | {}'.format(key, d[key]))

否则你会得到KeyError例外。

您可能对collections.Counter()课程感兴趣;这是一本计数字典:

from collections import Counter

def histogram(L):
    d = Counter(letter for line in L for letter in x)
    for letter in d:
        print('{} | {}'.format(letter, d[letter]))
    return d
于 2013-09-05T07:21:00.510 回答
0

只是为了好玩,让我们简化您的代码。您可以在初始字符串上使用 set() 来获取唯一字符的列表,然后只需使用列表的 count 方法。

def histogram(L):
    d = {letter:L.count(letter) for letter in set(L)}
    for key in d:
        print "{} | {}".format(key, d[key]}
于 2013-09-05T07:32:01.860 回答