如何对字典进行排序以从每个键的最高值到最低值打印?
How to sort a dictionary to print from highest value to lowest for each key?
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
它似乎只适用于最低到最高。所以我想知道是否有人能够帮助我。任何事情都很感激,如果可能的话解释一下:)
您可以使用 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)])
你可以使用这个:
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])])
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
它似乎只适用于最低到最高。所以我想知道是否有人能够帮助我。任何事情都很感激,如果可能的话解释一下:)
您可以使用 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)])
你可以使用这个:
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])])