我有一个名为Shareholder
的类,每个Shareholder
可以有4个职位中的一个:总裁、副总裁、秘书或财务主管(按顺序排列)。在
我想按职务对股东名单进行排序,但我不知道该怎么做,只能让这个可怕的cmp功能变成这样:
def shareholder_title_sort(s1, s2):
if s1.is_president: return -1
elif s2.is_president: return 1
elif s1.is_vice_president: return -1
elif s2.is_vice_president: return 1
elif s1.is_secretary: return -1
elif s2.is_secretary: return 1
elif s1.is_treasurer: return -1
elif s2.is_treasurer: return 1
else: return 0
像这样使用它:
^{pr2}$以下是Shareholder
类:
在Python2中,有什么更优雅的方法来实现这一点?在
下面所示的解决方案可能会有所帮助。答案代码中的目标是使对象可以排序,而不需要键。根据所使用的排序机制,可能需要其他比较运算符。在
将类型映射到数字,在
key
排序中使用:如果存在“role”属性,则可以在字典映射中使用该属性,但是:
^{pr2}$字典理解产生了一个从排名字母到索引的映射(因此
P
映射到0
)。best_role
根据股东的主要或次要角色,找到股东的“最高”排名(最低指数)。在这假定您的
SHAREHOLDER_TITLE
序列是按优先顺序排序的。如果没有,只需生成一个手动映射;例如{'P': 0, 'V': 1, 'S': 2, 'T': 3}
。在相关问题 更多 >
编程相关推荐