簡體   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