如何对每个键的字典进行排序以从最高值到最低值进行打印?

时间:2015-01-27 20:12:29

标签: python sorting dictionary

txt会包含以下内容:

Matt Scored: 10
Jimmy Scored: 3
James Scored: 9
Jimmy Scored: 8
....

我设法编写的代码(对python来说很新)是:

from collections import OrderedDict
#opens the class file in order to create a dictionary
dictionary = {}
#splits the data so the name is the key while the score is the value
f = open('ClassA.txt', 'r')
d = {}
for line in f:
    firstpart, secondpart = line.strip().split(':')
    dictionary[firstpart.strip()] = secondpart.strip()
    columns = line.split(": ")
    letters = columns[0]
    numbers = columns[1].strip()
    if d.get(letters):
        d[letters].append(numbers)
    else:
        d[letters] = list(numbers)
#sorts the dictionary so it has a alphabetical order
sorted_dict = OrderedDict(sorted(d.items()))
print (sorted_dict)

我遇到的问题是在尝试使用名称打印字典时,从最高到最低的分数是,它只会在使用max函数时打印出得分最高的名称,或者即时通讯使用itemgetter它似乎只适用于从最低到高。所以我想知道是否有人能够帮助我。任何事情都值得赞赏,如有可能请解释:)

2 个答案:

答案 0 :(得分:3)

您可以使用:

sorted_dict = OrderedDict(
    sorted((key, list(sorted(vals, reverse=True))) 
           for key, vals in d.items()))

此代码段按字母顺序对名称进行排序,并从高到低对每个名称的分数进行排序。排序方法中的reverse参数可用于强制从最高到最低的顺序。

例如:

>>> d = {"Matt": [2,1,3], "Rob": [4,5]}
>>> OrderedDict(sorted((key, list(sorted(vals, reverse=True))) for key, vals in d.items()))
OrderedDict([('Matt', [3, 2, 1]), ('Rob', [5, 4])])

答案 1 :(得分:2)

您可以使用OrderedDict

# regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

# dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])