繁体   English   中英

使用OrderedDict还是有序列表?(新手)

[英]Use OrderedDict or ordered list?(novice)

(使用Python 3.4.3)这是我想做的:我有一本字典,其中的键是字符串,值是文件中字符串出现的次数。 我需要输出出现频率最高的字符串以及它们的频率(如果最频繁的出现并发,则输出所有最频繁的字符串)。

我曾尝试使用OrderedDict。 我可以很好地创建它,但是我很难使它专门输出最频繁出现的输出。 我可以继续尝试,但是我不确定OrderedDict确实是我应该使用的,因为一旦确定并输出最频繁的字符串及其频率,就不再需要实际的OrderedDict。 一位同学推荐了一个有序列表,但是我看不到如何保留键和值之间的链接,因为我现在拥有它们。

是OrderedDict最好的工具,可以做我正在寻找的东西,还是还有其他东西? 如果是的话,有没有办法过滤/切片(或等效的)OrderedDict?

您可以简单地使用带有适当键功能的sorted ,在这种情况下,您可以使用operator.itemgetter(1)来根据值对项目进行排序。

from operator import itemgetter

print sorted(my_dict.items(),key=itemgetter(1),reverse=True)

这可以分两个步骤解决。 首先,按字典条目的频率对其进行排序,以使频率最高。

其次,使用Python的groupby函数从列表中获取匹配的条目。 因为您只对最高的东西感兴趣,所以您会在一次迭代后停止。 例如:

from itertools import groupby
from operator import itemgetter

my_dict = {"a" : 8, "d" : 3, "c" : 8, "b" : 2, "e" : 2}

for k, g in groupby(sorted(my_dict.items(), key=itemgetter(1), reverse=True), key=itemgetter(1)):
    print list(g)
    break

这将显示:

[('a', 8), ('c', 8)]

由于ac等于顶部。

如果删除break语句,将获得完整列表:

[('a', 8), ('c', 8)]
[('d', 3)]
[('b', 2), ('e', 2)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM