2015-09-06 56 views
-3

任務是使用機器學習創建垃圾郵件過濾器。爲了進行特徵選擇,我實現了一種計算每個單詞的MI的方法,但是我想返回N個具有高MI的單詞,並根據它們在垃圾郵件中出現的次數選擇它們。用於在Python中排序的容器

附加要求的原因是,我們使用的是小的lingspam集合,結果之間幾乎沒有差異,並且有大約3000個詞共享相同的最高MI值。

我們需要在Python中做到這一點,我目前使用字典來實現這一點,但我找不到容器類型,讓我做我需要的。

回答

1

您可以對詞典中的項目進行排序(您必須使用自定義鍵),其中項目以列表形式存儲。

>>> some_dictionary = {"a": 1, "b": 5, "c": 0, "e": 2} 
>>> sorted(some_dictionary.items()) 
[('a', 1), ('b', 5), ('c', 0), ('e', 2)] 
>>> sorted(some_dictionary.items(), key=lambda i:i[1])                                                        
[('c', 0), ('a', 1), ('e', 2), ('b', 5)] 
>>> 

哪裏.items()讓你在字典中的項目(以任意順序):

>>> some_dictionary.items() 
dict_items([('a', 1), ('b', 5), ('e', 2), ('c', 0)]) 

注意dict_items是一個迭代,這只是包裝在這種情況下的列表。

+0

啊優秀 - 我沒有意識到使用lambda排序 – Syzorr

+0

它在[Python文檔](https://docs.python.org/3/library/functions.html#sorted)中有更好的解釋: 「* key *指定一個參數的函數,用於從每個列表元素提取比較鍵」 – cyphar