在python中排序字典列表

mlu*_*bke 8 python dictionary list

我有一个字典的python列表:

mylist = [
{'id':0, 'weight':10, 'factor':1, 'meta':'ABC'},
{'id':1, 'weight':5, 'factor':1, 'meta':'ABC'},
{'id':2, 'weight':5, 'factor':2, 'meta':'ABC'},
{'id':3, 'weight':1, 'factor':1, 'meta':'ABC'}
]
Run Code Online (Sandbox Code Playgroud)

什么是最有效/最干净的方式来按重量排序该列表然后因素(数字).结果列表应如下所示:

mylist = [
{'id':3, 'weight':1, 'factor':1, 'meta':'ABC'},
{'id':1, 'weight':5, 'factor':1, 'meta':'ABC'},
{'id':2, 'weight':5, 'factor':2, 'meta':'ABC'},
{'id':0, 'weight':10, 'factor':1, 'meta':'ABC'},
]
Run Code Online (Sandbox Code Playgroud)

dF.*_*dF. 23

mylist.sort(key=lambda d: (d['weight'], d['factor']))
Run Code Online (Sandbox Code Playgroud)

要么

import operator
mylist.sort(key=operator.itemgetter('weight', 'factor'))
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢+1,因为它使用密钥.我不能用lambda +1.对于n00bz,def版本通常比lambda更容易. (4认同)
  • +1因为它使用键而我不怕lambda ;-) (4认同)
  • 没有向人们展示没有学过lambda的人,有助于确保他们永远不会学习它. (3认同)
  • n00b无法理解lambda并不意味着它不应该被使用.实际上,lambdas使代码更易于遵循,并且在其他方​​面不允许某些魔法/糖.如果你不理解lambdas,你应该去搜索http://stackoverflow.com/questions/150129/what-is-a-lambda或www.diveintopython.org/power_of_introspection/lambda_functions.html这样的问题并回来当你了解它们.此外,http://stackoverflow.com/questions/134626/which-is-more-preferable-to-use-in-python-lambda-functions-or-nested-functions discuses*when*你应该使用lambdas. (2认同)
  • 这不是理解或恐惧的问题.我厌倦了n00b的问题.一个简单的`def`以一种通常更容易理解的方式做同样的事情.30年后,我了解到所有软件都由n00bz维护和"增强",而这些软件并没有得到细微差别. (2认同)