[英]How to sort a list of objects based on the value of a field
我曾经有一个玩家的以下表示:
from dataclasses import dataclass
from pprint import pprint
from typing import Union
@dataclass
class Player:
name: str
club: str
is_captain: bool
is_vice_captain: bool
players = [
Player("Desmond Bane", "MEM", False, False),
Player("Jaren Jackson", "MEM", False, True),
Player("Steven Adams", "MEM", False, False),
Player("Ja Morant", "MEM", True, False),
Player("Dillion Brooks", "MEM", False, False),
]
我可以很容易地按队长排序:
sorted_players = sorted(players, key=lambda x: (x.is_captain, x.is_vice_captain), reverse=True)
pprint(sorted_players)
[Player(name='Ja Morant', club='MEM', is_captain=True, is_vice_captain=False),
Player(name='Jaren Jackson', club='MEM', is_captain=False, is_vice_captain=True),
Player(name='Desmond Bane', club='MEM', is_captain=False, is_vice_captain=False),
Player(name='Steven Adams', club='MEM', is_captain=False, is_vice_captain=False),
Player(name='Dillion Brooks', club='MEM', is_captain=False, is_vice_captain=False)]
现在我将队长减少到一个领域:
Captain = 'cap'
Vice_captain = 'vice_cap'
Non_captain = None
Captaincy = Union[Captain, Vice_captain, Non_captain]
@dataclass
class Player2:
name: str
club: str
captaincy: Captaincy
players2 = [
Player2("Desmond Bane", "MEM", Non_captain),
Player2("Jaren Jackson", "MEM", Vice_captain),
Player2("Steven Adams", "MEM", Non_captain),
Player2("Ja Morant", "MEM", Captain),
Player2("Dillion Brooks", "MEM", Non_captain),
]
完成此操作后,我想知道如何对球员进行排序,以便队长先排,副队长排第二,然后是团队的 rest?
您可以使用dict
对层次结构进行编码
values = {Captain:1, Vice_captain: 2}
sorted_players = sorted(players2, key=lambda x: values.get(x.captaincy, 3))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.