2 回答

TA貢獻1789條經驗 獲得超8個贊
這是我將如何執行此操作的代碼(這花了我一段時間):
grades = {}
def ordered_score():
gradesOrder = []
namesOrder = []
for a in sorted(list(grades.values()), reverse=True):
gradesOrder.append(a)
for a in gradesOrder:
for b, c in sorted(list(grades.items())):
if a == c:
namesOrder.append(b)
return gradesOrder, namesOrder
grades['Jacob'] = 52
grades['Elsa'] = 97
grades['Timber'] = 22
new_grades = ordered_score()
print(ordered_score()[0])
print(ordered_score()[1])
打印結果如下所示:
[97, 52, 22]
['Elsa', 'Jacob', 'Timber']

TA貢獻2036條經驗 獲得超8個贊
有幾種方法可以做到這一點。
第一個,可能也是最清楚的,是使用 a listofdicts并按分數鍵排序:
from operator import itemgetter
unsorted_data = [{'name': 'John Smith', 'score': 100},
{'name': 'Dum Dum', 'score': 55},
{'name': 'Billy Kid', 'score': 81},
{'name': 'Bob Joe', 'score': 95}]
sorted(unsorted_data, key=itemgetter('score'))
輸出:
[{'name': 'Dum Dum', 'score': 55}, {'name': 'Billy Kid', 'score': 81}, {'name': 'Bob Joe', 'score': 95}, {'name': 'John Smith', 'score': 100}]
第二種是使用單個dict:
scores = {'John Smith': 100, 'Bob Joe': 95, 'Billy Kid': 81, 'Dum Dum': 55}
sorted(scores.items(), key=itemgetter(1))
輸出:
[('Dum Dum', 55), ('Billy Kid', 81), ('Bob Joe', 95), ('John Smith', 100)]
這是,海事組織,不太直觀,因為它返回list的tuples,你按位置有指標,而不是一個明顯的字符串鍵。它節省了一點空間,但這是您幾乎不應該擔心優化的事情,因為無論如何您都在使用 Python。
最后是基于以下進行排序zip:
namesOrder = [100, 95, 81, 55]
gradesOrder = ['John Smith', 'Bob Joe', 'Billy Kid', 'Dum Dum']
[name for grade, name in sorted(zip(namesOrder, gradesOrder))]
輸出:
['Dum Dum', 'Billy Kid', 'Bob Joe', 'John Smith']
這僅返回名稱,這在某些情況下可能是您想要的,并且如果您的數據來自多個lists.
您還可以傳遞reverse=True給任何sorted調用以按降序排序,而不是默認的升序。
添加回答
舉報