簡體   English   中英

如何對字典進行排序,以便將每個鍵從最高值打印到最低值?

[英]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函數時打印分數最高的名稱,或者如果im使用itemgetter它只會顯示從最低到最高。 所以我想知道是否有人可以幫助我。 任何事情都值得贊賞,請解釋一下:)

您可以使用此:

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])])

您可以使用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)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM