Pythonic方法通过对象中包含的dict值(按键)对对象列表进行排序

时间:2010-01-16 21:38:24

标签: python sorting

我正在寻求以更加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)?

3 个答案:

答案 0 :(得分:9)

mylist.sort(key=lambda x: x.dict_properties['mykey'])

更简单,更快捷。您可以找到operator并尝试撰写attrgetteritemgetter,但是直截了当的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] :)
  • 这样sort()可以展开它的翅膀。