亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創建一個排序數組,其訂單與輸入相關聯

如何創建一個排序數組,其訂單與輸入相關聯

慕碼人8056858 2021-12-16 16:10:25
本質上,我有一個計算人的平均加權分數的函數。如果其中一個輸入是姓名,ex name = "John Smith" 并且他們的最終成績是總分 = 100。如果我要為另一個人再次運行這個程序,他們的姓名 = "Bob Joe" 并且總分 = 95 并存儲這些中的每一個。我如何將數字與名稱相關聯,以便根據他們的總分有一個升序的名稱數組。我的預期結果是名稱順序 = [100,95,81,55]GradesOrder = [約翰·史密斯、鮑勃·喬、比利·基德、達姆·達姆]成績按收到的分數順序排列
查看完整描述

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


查看完整回答
反對 回復 2021-12-16
?
慕桂英3389331

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調用以按降序排序,而不是默認的升序。


查看完整回答
反對 回復 2021-12-16
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號