Sorting Lists of Dictionaries

 

通常情况下,你可能需要对一个dictionaries的list,基于某个key排序。比如:

  1. >>> a = {"key1": 5 , "key2": 8, "key3": 2}
  2. >>> b = {"key1": 7 , "key2": 4, "key3": 9}
  3. >>> c = {"key1": 6 , "key2": 1, "key3": 1}
  4. >>> undecorated = [a, b, c]

该如何对这个list进行排序呢?
当然会有很多方法,最快的方法就是避免使用自定义的比较函数代替内建的比较函数,下面我们使用装饰-排序-反装饰模式进行排序:

  1. >>> sort_on = "key2"
  2. >>> decorated = [(dict_[sort_on], dict_) for dict_ in undecorated]
  3. >>> decorated
  4. [(8, {'key3'2'key2'8'key1'5}), (4, {'key3'9'key2'4'key1'7}), (1, {'key3'1'key2'1'key1'6})]
  5. >>> decorated.sort()
  6. >>> decorated
  7. [(1, {'key3'1'key2'1'key1'6}), (4, {'key3'9'key2'4'key1'7}), (8, {'key3'2'key2'8'key1'5})]
  8. >>> result = [dict_ for (key, dict_) in decorated]
  9. >>> result
  10. [{'key3'1'key2'1'key1'6}, {'key3'9'key2'4'key1'7}, {'key3'2'key2'8'key1'5}]
  11. >>> 

在Python2.4的list.sort()方法中,提供了key=argument,所以也可以如下比较:

  1. >>> import operator
  2. >>> result = sorted(undecorated,key=operator.itemgetter('key2'))

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值