Python计数器键值

时间:2013-04-24 15:40:18

标签: python counter

我的问题类似于我之前的问题:Python list help (incrementing count, appending)。我接受的答案很有效。但是,这次我有一个不同的问题。

我正在从json文件解析一个字符串,做一些清理然后附加一个新字符串。我需要得到每个单词的计数器(这使得它成为一个唯一的列表,发生的计数器得到更新),从高到低排序(我相信我需要在这里使用most_common)然后将列表限制为20.我可以在JavaScript中完成所有这些操作,但不能在python中完成。

详细地说,我再次运行for循环来从字符串(json字符串文件)中获取每个字符串。

# Counter for each word.
words = Counter();

for e in strings:
    # I am cleaning up the string here for unwanted chars, make it lower case
    # and append it to a new string variable.
    # if I were to print the new string variable it will look like this: 
    # hello test another test append hi hai hello hello

# i know I need to call words.update
# should I run a for loop in my new string variable  for each word?

我怎么能把它限制在20?

我想要产生的是这样的:

word, count
hello 3
test 2
another 1
append 1
hai 1
hi 1

任何建议都会非常感谢。

1 个答案:

答案 0 :(得分:2)

如果您有列表字词,则使用.update()方法:

words.update(some_list_of_words)

您也可以传入生成器表达式:

words.update(word.lower() for word in e.split())

会将字符串e拆分为空格上的单独单词,然后将每个单词小写并计算这些单词。

.most_common()接受一个参数,即要返回的最大项目数:

words.most_common(20)

使用较少的单词进行演示,将其限制为前3个最常用的单词:

>>> from collections import Counter
>>> words = Counter('spam ham eggs baz foo bar baz spam ham eggs spam spam bacon eggs ham spam spam spam eggs ham'.split())
>>> words.most_common(3)
[('spam', 7), ('ham', 4), ('eggs', 4)]