2017-09-02 8 views
0

だから私はこのような高いスコアファイルがあります。新しいアイテムがプッシュされたときに辞書を並べ替える方法を教えてください。

Markus:5000 
Mike:3000 
John:2400 

をそして私はOrderdDictにそれを読む:今、私は辞書に新しいスコアを追加するよう

high_scores = OrderedDict() 
with open('highscores.txt') as file: 
    for line in file: 
     name, score = line.strip().split(':') 
     high_scores[name] = int(score) 

、どのように私はそれをソートしておくことができます?私が考える唯一の方法は、このようなもので辞書を毎回再作成することです:

high_scores = sorted(high_scores.items(), key=lambda x: x[1], reversed=True) 
high_scores = OrderedDict(high_scores) 

しかし、これはかなりひどい振る舞いを思わ私はそれらを追加する要素が正しい位置に置かれた場合、私は非常に好むだろうつまり辞書を常にソートしておきたいのです。

+1

ソート順を保持する場合は、優先度キューのような別のデータ構造を検討するとよいでしょう。 –

+0

'sort'それはアルゴリズムのtimsortの仕組みのためにおそらくそれほど悪くはありません。またC言語で行われますが、' sort'のようにJohnのようなリストが代わりに –

+1

@Chris_Randsを使うかもしれません"bisect" lib ... –

答えて

2

OrderedDictは、ハイスコア一覧には最適な構造ではありません。要素を追加するたびに、2タプルの通常のリストを試してみてください。単純にsort()です。

明示的に並べ替えが嫌いなら、https://pypi.python.org/pypi/sortedcontainersを使用してください。

関連する問題