辞書は次のようになります。
_{'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}
_
辞書を数値順に並べ替えたいのですが、結果は次のようになります。
_{'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82}
_
sorted(self.docs_info.items)
を試しましたが、うまくいきません。
キーのみでソートする必要がある場合は、すでに95%です。辞書が_docs_info
_と呼ばれていると仮定すると:
_for key, value in sorted(docs_info.items()): # Note the () after items!
print(key, value)
_
辞書キーは常に一意であるため、docs_info.items()
(タプルのシーケンス)でsorted
を呼び出すことは、キーのみでソートすることと同等です。
数字を含む文字列が直感的にソートされないことに注意してください!例えば_"11"
_は、_"2"
_よりも「小さい」。数値順にソートする必要がある場合は、int
ではなくstr
キーを作成することをお勧めします。例えば.
_int_docs_info = {int(k) : v for k, v in docss_info.items()}
_
もちろん、これはあなたがaccess辞書要素の順序を変更するだけで、通常はこれで十分です(アクセスしていない場合、ソートされていれば何が問題になりますか?)。何らかの理由で辞書自体を「ソート」する必要がある場合は、_collections.OrderedDict
_を使用する必要があります。これは、アイテムが挿入された順序を覚えています。したがって、最初に辞書をソートし(上記のように)、ソートした(キー、値)ペアからOrderedDict
を作成できます。
_sorted_docs_info = collections.OrderedDict(sorted(docs_info.items()))
_
標準Python dictsは「順不同」です。OrderedDict
を使用できます。 docs をご覧ください。
from collections import OrderedDict
d = {'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40}
OrderedDict(sorted(d.items(), key=lambda t: t[0]))
# OrderedDict([('57480', 89), ('57481', 50), ('57482', 18), ('57483', 110), ('57484', 40), ('57485', 82)])
繰り返し要素を並べ替えて順序付けられた辞書に挿入するのが遅すぎる場合は、PyPIで並べ替えられた辞書実装の1つを検討してください。 SortedDict データ型は、キーをソート順に効率的に維持します。 sortedcontainers モジュールには、そのような実装が1つ含まれています。
PyPIからのインストールは簡単です:
pip install sortedcontainers
pip install
ができない場合は、sortedlist.pyファイルとsortdictdict.pyファイルを open-source repository からコピーしてください。 SortedContainersはpure-Pythonで実装されていますが、fast-as-C実装です。
簡単にインストールしたら:
In [1]: from sortedcontainers import SortedDict
In [6]: SortedDict({'57481': 50, '57480': 89, '57483': 110, '57482': 18, '57485': 82, '57484': 40})
Out[6]: SortedDict({'57480': 89, '57481': 50, '57482': 18, '57483': 110, '57484': 40, '57485': 82})
また、sortedcontainersモジュールは、いくつかの一般的な実装の パフォーマンス比較 を維持します。