我正在寻求以更加pythonic的方式做以下事情的建议。
考虑:
class MyObj(object):
def __init__(self):
self.dict_properties = {}
假设我有一个包含多个MyObj实例的列表:
mylist = [<__main__.MyObj object at 0x1005e3b90, ...]
现在我想根据MyObj中mylist
中某个键的值对dict_properties
进行排序。
工作是什么:
mylist.sort(lambda x,y: cmp(x.dict_properties['mykey'],
y.dict_properties['mykey']))
但几乎不感觉 pythonic 。
有没有更好的方法(也许使用operator.attrgetter
)?
答案 0 :(得分:9)
mylist.sort(key=lambda x: x.dict_properties['mykey'])
更简单,更快捷。您可以找到operator
并尝试撰写attrgetter
和itemgetter
,但是直截了当的lambda
(或def
)似乎最简单。
答案 1 :(得分:3)
我只是这样做:
mylist.sort(key=lambda o: o.dict_properties["kykey"])
你也可以在课堂上覆盖 cmp 。
答案 2 :(得分:1)
如果速度是个问题,那么请使用decorate-sort-undecorate:
mylist_decorated = [(elem.dict_properties['mykey'], elem) for elem in mylist]
mylist_decorated.sort()
mylist = [elem[1] for elem in mylist_decorated] # or zip(*mylist_decorated)[1] :)