発生回数順に並べられたカウンターがあります。
_counterlist = Counter({'they': 203, 'would': 138, 'your': 134,...}).
_
しかし、私がcounterlist.keys()
を実行すると、戻りリストは次のようになります。
_['wirespe', 'four', 'accus',...]
_
の代わりに
_['they', 'would', 'your',...].
_
どうして?
Counter()
Counterは、ハッシュ可能なオブジェクトをカウントするためのdictサブクラスです。これは、要素が辞書キーとして格納され、それらの数が辞書値として格納される、順序付けされていないコレクションです。
順不同の辞書なので、それらを辞書に追加した順序は保持されません。それらを順番に保持したい場合は OrderedDict()
を使用する必要があります
OrderedCounter()
が必要な場合は、これを行うことができます。これは here から取得しています。これには、なぜ機能するかについての説明があります。
from collections import *
class OrderedCounter(Counter, OrderedDict):
pass
counterlist = OrderedCounter({'would': 203, 'they': 138, 'your': 134})
print counterlist.keys()
辞書に特定の順序で値を入力している間、dictはどのような順序も保持しません。辞書の.keys()
は、特定の順序で戻りません。順序を保持するOrderedDict
がありますが、それがCounter
とどのように相互作用するかはわかりません。
編集:
Counter.most_common() を使用することもできます。これは、willであるタプルのリストを返します。
追加のクラスを作成しない別のソリューションは、所有しているアイテムのセットを取得し、カウントされたキーに基づいてそれらをソートすることです。以下のコードは@ user3005486に基づいています:
import collections
#if this is your list
list_to_be_sorted = ['they', 'would', 'they', ...]
#then counterlist = {'would': 203, 'they': 138, 'your': 134}
counterlist = collections.Counter(list_to_be_sorted)
#if you sort this list ascendingly you get ['would', 'would', ..., 'they', 'they', ...etc.]
sorted_words = sorted(counterlist, key: lambda x:-counterlist[x])
distinct_words_from_list = set(list_to_be_sorted)
sorted_distinct_list = sorted(distinct_words_from_list, key: lambda x:-counterlist[x])
#then sorted_distinct_list = ['would', 'they', 'your']