如何在不使用 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
不要介意模式,我只想根據分數對其進行排序。您的幫助將不勝感激。
uj5u.com熱心網友回復:
您可以使用內置的排序功能。
使用測驗資料的示例,因為我們不知道您的資料是什么樣的:
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})]
uj5u.com熱心網友回復:
您可以使用元組串列代替 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")
uj5u.com熱心網友回復:
我試著模擬你的資料,
我認為這對你有用:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/491259.html
