注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Wei Ding blog

 
 
 

日志

 
 

Python字典按值排序、包含字典的列表按字典值排序的方法(转载)  

2014-07-12 11:51:02|  分类: python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  1. http://blog.sina.com.cn/s/blog_64d0b03c0101g4ic.html


  2. #-*- encoding=utf-8 -*-  
  3.   
  4. import operator  
  5. #按字典值排序(默认为升序)  
  6. {1:23:44:32:10:0 
  7. sorted_x sorted(x.iteritems(), key=operator.itemgetter(1))  
  8. print sorted_x  
  9. #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]  
  10. #如果要降序排序,可以指定reverse=True  
  11. sorted_x sorted(x.iteritems(), key=operator.itemgetter(1), reverse=True 
  12. print sorted_x  
  13. #[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]  
  14. #或者直接使用list的reverse方法将sorted_x顺序反转  
  15. #sorted_x.reverse()  
  16.   
  17. #取代方法是,用lambda表达式  
  18. sorted_x sorted(x.iteritems(), key=lambda x[1])  
  19. print sorted_x  
  20. #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]  
  21. sorted_x sorted(x.iteritems(), key=lambda x[1], reverse=True 
  22. print sorted_x  
  23. #[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]  
  24.   
  25. #包含字典dict的列表list的排序方法与dict的排序类似,如下:  
  26. [{'name':'Homer''age':39}, {'name':'Bart''age':10}]  
  27. sorted_x sorted(x, key=operator.itemgetter('name'))  
  28. print sorted_x  
  29. #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]  
  30. sorted_x sorted(x, key=operator.itemgetter('name'), reverse=True 
  31. print sorted_x  
  32. #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}]  
  33. sorted_x sorted(x, key=lambda x['name'])  
  34. print sorted_x  
  35. #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]  
  36. sorted_x sorted(x, key=lambda x['name'], reverse=True 
  37. print sorted_x  
  38. #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}]  

1、 准备知识:

在python里,字典dictionary是内置的数据类型,是个无序的存储结构,每一元素是key-value对:

如:dict {‘username’:‘password’,‘database’:‘master’},其中‘username’和‘database’是key,而‘password’和‘master’是value,可以通过d[key]获得对应值value的引用,但是不能通过value得到key。

对于dictionnary,需知道以下几点注意事项:

a、 dictionary 的 key 是大小写敏感的

b、 一个dictionary中不能有重复的 key

c、 dictionary是无序的,没有元素顺序的概念,它们只是序偶的简单排列

 

 

2、 字典排序实现:

参见cookbook,Recipe 5.1. Sorting Dictionary讲述了字典排序的方法;

前面已说明dictionary本身没有顺序概念,但是总是在某些时候,但是我们常常需要对字典进行排序,怎么做呢?下面告诉你:

方法1:最简单的方法,排列元素(key/value对)然后挑出值字典的items方法,会返回一个元组的列表,其中每个元组都包含一对项目——键与对应的值。此时排序可以sort()方法

 

 

def sortedDictValues1(adict):
    items = adict.items()
    items.sort()
    return [value for key, value in items]

方法2:使用排列键(key)的方式,挑出值,速度比方法1快。字典对象的keys()方法返回字典中所有键值组成的列表,次序是随机的。需要排序时只要对返回的键值列表使用sort()方法

def sortedDictValues1(adict):
    keys = adict.keys()
    keys.sort()
    return [adict[key] for key in keys]

方法3:通过映射的方法去更有效的执行最后一步

def sortedDictValues1(adict):
    keys = adict.keys()
    keys.sort()
    return mapadict.get,keys

方法4:对字典按键排序,用元组列表的形式返回,同时使用lambda函数来进行;

sorted(iterable[cmp[key[reverse]]]
cmp和key一般使用lambda
如:
  >>> d={"ok":1,"no":2}
  对字典按键排序,用元组列表的形式返回
  >>> sorted(d.items, key=lambda d:d[0])
  [('no', 2), ('ok', 1)]
  对字典按值排序,用元组列表的形式返回
  >>> sorted(d.items, key=lambda d:d[1])
  [('ok', 1), ('no', 2)]

  评论这张
 
阅读(257)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017