【问题标题】:How to sort list like this?如何对这样的列表进行排序?
【发布时间】:2013-07-16 03:14:21
【问题描述】:

我有一个这样的列表:

li = [
  {
    'name': 'Lee',
    'age': 22
  },
  {
    'name': 'Mike',
    'age': 34
  },
  {
    'name': 'John',
    'age': 23
  }
]

我想使用sorted 方法对列表进行排序,并按age 键排序

如何实现?

【问题讨论】:

  • 碰巧sorted 会隐式执行此操作,如果您让它使用其默认值。
  • @kojiro:我们可能不应该依赖它。请参阅 Python 2.7 文档的this section;在 Python 3 中,比较失败并出现 TypeError。

标签: python list sorting dictionary


【解决方案1】:

使用key function

li_sorted = sorted(li, key=lambda x: x['age'])

【讨论】:

    【解决方案2】:

    @kojiro 建议的 Python3 等价物是这样的

    >>> sorted(li, key=lambda x:sorted(x.items()))
    [{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}]
    

    显然这不如

    >>> sorted(li, key=lambda x:x['age'])
    [{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}]
    

    无论如何。还有一个好处就是不依赖'age' < 'name'

    以下是使用itemgetter 编写相同内容的方法

    >>> from operator import itemgetter
    >>> sorted(li, key=itemgetter('age'))
    [{'age': 22, 'name': 'Lee'}, {'age': 23, 'name': 'John'}, {'age': 34, 'name': 'Mike'}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多