2017-09-02 84 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

'每次排序'可能並沒有聽起來那麼糟糕,因爲算法timsort的工作方式,也是在C中完成的,但'排序'列表像約翰建議的 –

+1

@Chris_Rands或可能利用'bisect'庫... –

回答

2

OrderedDict不是高分列表的最佳結構。嘗試一個2元組的定期列表,並且每次添加元素時都只需要sort()

如果你真的不喜歡顯式排序,你可以使用https://pypi.python.org/pypi/sortedcontainers爲你做。

相關問題