如何根据分数对数据进行排序?



如何在不使用import Panda的情况下根据分数对球员数据进行排序?

下面是我的代码:

player = {}
playerData = {}
def loadData():
fileHandle = open('Leaderboard.csv', 'r')
player.clear()
for line in fileHandle:
data = line[0:-1].split(",")
playerName = data[0]
playerScore = data[1]
playerPattern = data[2]
playerData = {}
playerData["Score"] = playerScore
playerData["Pattern"] = playerPattern
player[playerName] = playerData
fileHandle.close()
def leaderboard():
print("=========================================")
print("LEADERBOARD")
for k in player:
playerData = player[k]
playerScore = playerData["Score"]
playerPattern = playerData["Pattern"]
print(k + " - " + playerScore + " - " + playerPattern)
print("n")

这是我的CSV示例:

Liam      10    kdi
Joshua    50    djehfge
Patricia  25    fkris

我希望我的输出是这样的:

Joshua - 50 - djehfge
Patricia - 25 - fkris
Liam - 10 - kdi

不要介意模式,我只是想根据分数进行排序。感谢您的帮助。

可以使用内置的排序函数

使用测试数据的例子,因为我们不知道你的数据是什么样子的:

player = {"player1": {"name": "player1", "Score": 10},
"player2": {"name": "player2", "Score": 20},
"player3": {"name": "player3", "Score": 5}}
leaderboard = sorted(player.items(), key=lambda x: x[1]['Score'], reverse=True)
print(leaderboard)

输出:

[('player2', {'name': 'player2', 'score': 20}),
('player1', {'name': 'player1', 'score': 10}),
('player3', {'name': 'player3', 'score': 5})]

您可以使用list of tuples代替dict,并按列索引(从零开始)对它们进行排序。

rows = []
with open("Leaderboard.csv", mode="r") as f:
for line in f.readlines():
rows.append(line.split(","))
print("=" * 50)
print("LEADERBOARD")
for player, score, pattern in sorted(rows, key=lambda row: row[1], reverse=True):
print(f"{player} - {score} - {pattern}")
print("n")

我试着模拟你的数据,

我想这适合你:

from collections import OrderedDict
player = {}
playerData = {}
sampledata=[
"Joshua,50,djehfge",
"Patricia,25,fkris",
"Hossein,75,iambini"
]
index_sort_key="Score"
def loadData():
player.clear()
for line in sampledata:
data = line[0:-1].split(",")
playerName = data[0]
playerScore = data[1]
playerPattern = data[2]
playerData = {}
playerData["Score"] = playerScore
playerData["Pattern"] = playerPattern
player[playerName] = playerData
def leaderboard():
print("=========================================")
print("LEADERBOARD")
for k in player:
playerData = player[k]
playerScore = playerData["Score"]
playerPattern = playerData["Pattern"]
print(k + " - " + playerScore + " - " + playerPattern)
loadData()
player = OrderedDict(sorted(player.items(), key=lambda value:value[1][index_sort_key],reverse=True))
leaderboard()

###output##############
#    =========================================
#    LEADERBOARD
#   Hossein - 75 - iambin
#    Joshua - 50 - djehfg
#    Patricia - 25 - fkri

最新更新