2

我在做一个练习时遇到了一点问题:基本上任务是打开一个 url,将其转换为给定格式,并计算文本中给定字符串的出现次数。

import urllib2 as ul 

def word_counting(url, code, words):
    page = ul.urlopen(url)
    text = page.read()
    decoded = ext.decode(code)
    result = {}

    for word in words:
        count = decoded.count(word)
        counted = str(word) + ":" + " " + str(count)
        result.append(counted)

    return finale

我应该得到的结果类似于“ word1: x, word2: y, word3: z ”,其中 x,y,z 是出现次数。但似乎我只得到一个数字,当我尝试运行测试程序时,我得到的结果只有第一次出现 9,第二次出现 14,第三次出现 5,缺少其他出现和整个计数值. 我究竟做错了什么?提前致谢

4

3 回答 3

1

您没有正确附加到字典。

正确的方法是result[key] = value

因此,对于您的循环,它将是

for word in words:
  count = decoded.count(word)
  result[word] = str(count)

一个没有解码但使用的例子.count()

words = ['apple', 'apple', 'pear', 'banana']
result= {}
  for word in words:
    count = words.count(word)
    result[word] = count

>>> result
>>> {'pear': 1, 'apple': 2, 'banana': 1}     
于 2013-11-08T10:50:01.680 回答
1

或者您可以使用 Collections.Counter :

>>> from collections import Counter
>>> words = ['apple', 'apple', 'pear', 'banana']
>>> Counter(words)
Counter({'apple': 2, 'pear': 1, 'banana': 1})
于 2013-11-08T11:21:16.817 回答
0

不要忘记列表和字典理解。它们对于较大的数据集可能非常有效(特别是如果您正在分析示例中的大型网页)。归根结底,如果您的数据集很小,人们可能会争辩说 dict 理解语法更简洁/更 Pythonic 等。

所以在这种情况下,我会使用类似的东西:

result = {word : decoded.count(word) for word in words}
于 2013-11-08T11:20:29.203 回答