首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中获取列表中最常用的10个字符串

如何在python中获取列表中最常用的10个字符串
EN

Stack Overflow用户
提问于 2012-04-11 12:00:20
回答 5查看 7.5K关注 0票数 1

我有一个包含93个不同字符串的列表。我需要找到10个最频繁的字符串,返回必须是从最频繁到最不频繁的顺序。

代码语言:javascript
复制
mylist = ['"and', '"beware', '`twas', 'all', 'all', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'and', 'arms', 'as', 'as', 'awhile', 'back', 'bandersnatch', 'beamish', 'beware', 'bird', 'bite', 'blade', 'borogoves', 'borogoves', 'boy', 'brillig']
 # this is just a sample of the actual list.

我没有最新版本的python,也不能使用计数器。

EN

回答 5

Stack Overflow用户

发布于 2012-04-11 12:04:24

您可以使用collections module中的Counter来执行此操作。

代码语言:javascript
复制
from collections import Counter
c = Counter(mylist)

然后执行c.most_common(10)返回

代码语言:javascript
复制
[('and', 13),
 ('all', 2),
 ('as', 2),
 ('borogoves', 2),
 ('boy', 1),
 ('blade', 1),
 ('bandersnatch', 1),
 ('beware', 1),
 ('bite', 1),
 ('arms', 1)]
票数 16
EN

Stack Overflow用户

发布于 2012-04-11 12:54:28

David的回答是最好的-但如果您使用的Python版本不包括集合模块(在Python2.7中引入)中的计数器,则可以使用执行相同操作的Counter类的this implementation。我怀疑它会比模块慢,但会做同样的事情。

票数 3
EN

Stack Overflow用户

发布于 2012-04-11 13:10:30

David的解决方案是最好的。

但可能更多的是为了好玩,这里有一个不导入任何模块的解决方案:

代码语言:javascript
复制
dicto = {}

for ele in mylist:
    try:
        dicto[ele] += 1
    except KeyError:
        dicto[ele] = 1

top_10 = sorted(dicto.iteritems(), key = lambda k: k[1], reverse = True)[:10] 

结果:

代码语言:javascript
复制
>>> top_10
[('and', 13), ('all', 2), ('as', 2), ('borogoves', 2), ('boy', 1), ('blade', 1), ('bandersnatch', 1), ('beware', 1), ('bite', 1), ('arms', 1)]

编辑:

回答后续问题:

代码语言:javascript
复制
new_dicto = {}

for val, key in zip(dicto.itervalues(), dicto.iterkeys()):

    try:
        new_dicto[val].append(key)
    except KeyError:
        new_dicto[val] = [key]

alph_sorted = sorted([(key,sorted(val)) for key,val in zip(new_dicto.iterkeys(), new_dicto.itervalues())], reverse = True)

结果:

代码语言:javascript
复制
>>> alph_sorted
[(13, ['and']), (2, ['all', 'as', 'borogoves']), (1, ['"and', '"beware', '`twas', 'arms', 'awhile', 'back', 'bandersnatch', 'beamish', 'beware', 'bird', 'bite', 'blade', 'boy', 'brillig'])]

出现一次的单词按字母顺序排序,如果您注意到一些单词中有额外的引号。

编辑:

回答另一个后续问题:

代码语言:javascript
复制
top_10 = []

for tup in alph_sorted:
    for word in tup[1]:
        top_10.append(word)
        if len(top_10) == 10:
            break

结果:

代码语言:javascript
复制
>>> top_10
['and', 'all', 'as', 'borogoves', '"and', '"beware', '`twas', 'arms', 'awhile', 'back']
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10099602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档