(Es tut mir leid, dass in früheren Versionen dieser Frage die falsche Funktion angezeigt wurde, die ich korrigieren muss. Dies wurde behoben und ich hoffe, die Frage macht jetzt etwas mehr Sinn.)
Ich habe eine Liste von Objekten mit Punktzahlen und versuche, diesen Objekten basierend auf diesen Punktzahlen Ränge zuzuweisen. Unten ist im Grunde genommen, wie ich meine Daten ausgebe.
sorted_scores = [
('Apolo Ohno', 0),
('Shanie Davis', -1),
('Bodie Miller', -2),
('Lindsay Vohn', -3),
('Shawn White', -3),
('Bryan Veloso', -4)
]
Ich habe ein Unentschieden. Die Funktion, die im Moment den Objekten Positionen zuweist, ist einfach eine Schleife, die den Wert von i
als die endgültige Position des Objekts zuweist.
positions = {}
i = 1
for key, value in sorted_list:
# Da in meinem Code die Zeichenfolgen IDs sind, verwende ich den Schlüssel, um das Objekt abzurufen.
if value is not None:
positions[key] = i
i += 1
Das wird offensichtlich zurückgeben:
positions = {
'Apolo Ohno': 1,
'Shanie Davis': 2,
'Bodie Miller': 3,
'Lindsay Vohn': 4,
'Shawn White': 5,
'Bryan Veloso': 6
}
Hoffentlich ergibt das etwas Sinn. Der Kern der Frage liegt in dieser Schleife. Es würde mehr Sinn ergeben, wenn sie sie wie folgt zurückgeben würde:
positions = {
'Apolo Ohno': 1,
'Shanie Davis': 2,
'Bodie Miller': 3,
'Lindsay Vohn': 4, # Gleicher Wert.
'Shawn White': 4, # Gleicher Wert.
'Bryan Veloso': 6
}
Wie würde ich die obige Funktion bearbeiten, um das zu erreichen, unter Berücksichtigung, dass ich zu einem beliebigen Zeitpunkt beliebig viele Gleichstände haben könnte, je nachdem, wie viele meiner Mitglieder das betreffende Objekt gerankt haben? Der höchste Rang sollte 1 sein, so dass er als solcher angezeigt werden kann: /
Vielen Dank im Voraus. :)