代码之家  ›  专栏  ›  技术社区  ›  ChristopheD

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

  •  2
  • ChristopheD  · 技术社区  · 16 年前

    我正在寻求建议,以一种更通情达理的方式做下面的事情。

    考虑:

    class MyObj(object):
        def __init__(self):
            self.dict_properties = {}
    

    mylist = [<__main__.MyObj object at 0x1005e3b90, ...]
    

    现在我想分类 mylist dict_properties 在MyObj。

    工作原理是:

    mylist.sort(lambda x,y: cmp(x.dict_properties['mykey'],
                                y.dict_properties['mykey']))
    

    但那 几乎不 蟒蛇的 .

    有没有更好的方法(也许是使用 operator.attrgetter )?

    3 回复  |  直到 16 年前
        1
  •  9
  •   Alex Martelli    16 年前
    mylist.sort(key=lambda x: x.dict_properties['mykey'])
    

    更简单,更快。你可以伸手去拿 operator 试着写一篇 attrgetter itemgetter ,但这是一个直截了当的问题 lambda (或 def )这里似乎最简单。

        2
  •  3
  •   Alex Gaynor    16 年前

    mylist.sort(key=lambda o: o.dict_properties["kykey"])

    你也可以越狱 化学机械抛光

        3
  •  1
  •   Tomasz Zieliński    16 年前

    如果速度是一个问题,则使用装饰排序取消装饰:

        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()就可以展开它的翅膀。