[英]Is it possible plot using ordered dictionary or list, OrderedDict doesn't work
[英]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)]
由於a
和c
等於頂部。
如果刪除break
語句,將獲得完整列表:
[('a', 8), ('c', 8)]
[('d', 3)]
[('b', 2), ('e', 2)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.