【问题标题】:How do I sort a list of python Django objects?如何对 python Django 对象列表进行排序?
【发布时间】:2011-02-24 09:14:14
【问题描述】:

在 Django 中,我在列表中有一个模型对象。

[object, object, object]

每个对象都有“.name”,这是事物的标题。

如何按此标题的字母顺序排序?

这不起作用:

catlist.sort(key=lambda x.name: x.name.lower())

【问题讨论】:

  • 如果您阅读错误消息会有所帮助,这将有助于您的代码点恰好在x.name 中的点

标签: python django list sorting


【解决方案1】:
catlist.sort(key=lambda x: x.name.lower())

【讨论】:

    【解决方案2】:

    如果不调用 lower(),则可以认为以下内容比使用 lambda 更简洁:

    import operator
    catlist.sort(key=operator.attrgetter('name'))
    

    将该调用添加到lower(),您将进入一个函数组合痛苦的世界。使用在this other SO question 的答案中找到的Ants Aasmacompose(),您也可以看到函数式编程的光芒(我在开玩笑。所有编程范式肯定都有它们的时间和地点。):

    >>> def compose(inner_func, *outer_funcs):
    ...     if not outer_funcs:
    ...         return inner_func
    ...     outer_func = compose(*outer_funcs)
    ...     return lambda *args, **kwargs: outer_func(inner_func(*args, **kwargs))
    ...
    >>> class A(object):
    ...   def __init__(self, name):
    ...     self.name = name
    ...
    >>> L = [A(i) for i in ['aa','a','AA','A']]
    >>> name_lowered = compose(operator.attrgetter('name'), 
                               operator.methodcaller('lower'))
    >>> print [i.name for i in sorted(L, key=name_lowered)]
    ['a', 'A', 'aa', 'AA']
    

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多