2

私は以下のような辞書を持っていて、それをキー(日時オブジェクト)でソートしようとしています:

def t(date_st):
    return datetime.strptime(date_st, '%d-%m-%Y')

def sort_dict_data(data):
keylist = data.keys()
keylist.sort()
sorted_x = {}
for key in keylist:
    sorted_x.update({datetime.strftime(key, '%d-%m-%Y'):data.get(key)})
return sorted_x



print sort_dict_data({t('07-07-2012'): 3.5, t('09-07-2012'): 9.0, t('08-07-2012'): 5.0})
results: {'07-07-2012': 3.5, '09-07-2012': 9.0, '08-07-2012': 5.0}

どのように私はそれを次のようにすることができますか:

{'07-07-2012': 3.5, '08-07-2012': 5.0, '09-07-2012': 9.0}

前もって感謝します。

4

2 に答える 2

3

ディクトには信頼できる順序がありません。

代わりに使用できますOrderedDict

def sort_dict_data(data):
    return OrderedDict((datetime.strftime(k, '%d-%m-%Y'), v)
                       for k, v in sorted(data.iteritems()))

オンラインで動作することを確認してください:ideone

キーの順序ではなく、挿入OrderedDictの順序に従って順序付けられることに注意してください。上記のコードは、キー順にアイテムを挿入し、希望する結果を提供します。ただし、後で辞書に追加すると、キーの順序に従って正しい位置ではなく、最後に表示されることを覚えておくことが重要です。OrderedDict

于 2012-08-10T20:22:11.330 に答える
1

OrderedDictは、キーの順序ではなく、挿入の順序(年表)を保持します。プレーンディクトも保存しません。

キーでソートされた辞書の場合、Treap、赤黒木、またはコンピュータサイエンスで知られている他の多くのツリーデータ構造の1つが必要になる可能性があります。

Treapは平均して速いですが、それ自体がバランスを取り戻すため、まれに1回は少し遅くなります。

赤黒木はよく知られており、(treapsと比較して)比較的複雑で、平均してOKのパフォーマンスを提供します。それらの主な利点は、パフォーマンスが大きく変動しないことであり、ユーザーインターフェイスで優れている場合があります。

最近、dictに似ているが、ソートされたキーを使用するデータ構造のパフォーマンス比較を行いました。ここで見つけることができます:http ://stromberg.dnsalias.org/~strombrg/python-tree-and-heap-comparison/

于 2012-08-10T20:30:49.400 に答える