【发布时间】:2014-06-05 09:28:18
【问题描述】:
如何根据定义的映射按属性对 python 对象列表进行排序
例如
import random
class Obj(object):
attr = None
def __init__(self, attr):
self.attr = attr
def __repr__(self):
return self.attr
attrs = ['GROUPA', 'GROUPB', 'GROUPC']
objects = []
for x in range(0, 10):
objects.append(Obj(random.choice(attrs)))
objects = sorted(objects, key=lambda o: o.attr)
print '['
for o in objects:
print o
print ']'
给我
[
GROUPA
GROUPA
GROUPA
GROUPA
GROUPB
GROUPB
GROUPB
GROUPB
GROUPC
GROUPC
]
这很好,但我想定义一个映射并在排序时考虑它,例如:
mapping = ['GROUPB', 'GROUPA', 'GROUPC']
结果:
[
GROUPB
GROUPB
GROUPB
GROUPB
GROUPA
GROUPA
GROUPA
GROUPA
GROUPC
GROUPC
]
然后得到这样的结果
【问题讨论】:
-
运行您的示例不会在您编写时输出
[ AAABBBCCC ],而是[ GROUPA GROUPA GROUPA GROUPA GROUPA GROUPB GROUPB GROUPB GROUPC GROUPC ]。也许您应该更正示例或示例输出? -
你试过什么?为什么不在课堂上实现comparison operators?
标签: python