2017-09-02 69 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为你做。

相关问题