深入Python(1): 字典排序 关于sort()、reversed()、sorted()
http://www.cnblogs.com/BeginMan/p/3193081.html
一、Python的排序
1、reversed()
这个很好理解,reversed英文意思就是:adj. 颠倒的;相反的;(判决等)撤销的
print list(reversed(['dream','a','have','I']))
#['I', 'have', 'a', 'dream']
2、让人糊涂的sort()与sorted()
在Python 中sorted是内建函数(BIF),而sort()是列表类型的内建函数list.sort()。
sorted()
- sorted(iterable[, cmp[, key[, reverse]]])
-
Return a new sorted list from the items in iterable.
The optional arguments(可选参数) cmp, key, and reverse have the same meaning as those for the list.sort() method (described in section Mutable Sequence Types).
cmp specifies(指定) a custom comparison function of two arguments (iterable(可迭代的) elements) which should return a negative(复数), zero or positive(正数) number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument: cmp=lambda x,y: cmp(x.lower(), y.lower()). The default value is None.
key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.
#字符串排序使用是字典序,而非字母序
"""sorted()按照字典序排序"""
lis = ['a','c','z','E','T','C','b','A','Good','Tack']
print sorted(lis) #['A', 'C', 'E', 'Good', 'T', 'Tack', 'a', 'b', 'c', 'z']
关于字典序:
可参考百度百科。http://baike.baidu.com/view/4670107.htm
根据ASCII排,具体如下:
0-9(对应数值48-59);
A-Z(对应数值65-90);
a-z(对应数值97-122);------------
标准序: 短在前,长在后,等长的依次比字母,
如to < up < cap < cat < too < two <boat < boot < card
字典序: 依次比字母,
如boat < boot <cap < card < cat < to < too< two < up更有甚者说字典序就是字典的排序,像字典一样。我一直没有找到权威的说明,什么是字典序????求答案!!
sort()
s.sort([cmp[, key[, reverse]]])
三、Python的字典排序
1、关于Python字典的一些特征
无序:
字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素没有顺序,所以dic[0]是有语法错误的。
无重:
不可以有重复的键值,所以 dic.add['c'] = 4后,字典变成 {'a':1 , 'b':2 , 'c': 4}.
2、根据“键”或“键值”进行不同顺序的排序
函数原型:sorted(dic,value,reverse)
解释:dic为比较函数,value 为排序的对象(这里指键或键值),
reverse:注明升序还是降序,True--降序,False--升序(默认)
3、例子:
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, '33':56, 'd':0}
想把dic的value按照从大到小排序(value都是整数)。
dic = {'a':31, 'bc':5, 'c':3, 'asd':4, '33':56, 'd':0}
print sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )
#[('d', 0), ('c', 3), ('asd', 4), ('bc', 5), ('a', 31), ('33', 56)]
解释如下:
(1)、dic.iteritems(),返回字典键值对的元祖集合

print dic.iteritems() #<dictionary-itemiterator object at 0x00B71A80> for obj in dic.iteritems():
print obj,obj[0],obj[1] #('a', 31) a 31
#('c', 3) c 3
#('d', 0) d 0
#('bc', 5) bc 5
#('33', 56) 33 56
#('asd', 4) asd 4

(2)、关于排序对象
上述已经说过,value(或key)为排序的对象(这里指键或键值),然而为什么使用lambda函数呢,这里请参阅:点击阅读
key=lambda d:d[1] 是将键值(value)作为排序对象。
key = lambda d:d[1]
for i in dic.iteritems():
print key(i), #输出31 3 0 5 56 4,这些都是字典dic的值
如果选择 key = lambda d:d[0],则选择【键Key】作为排序对象。
(3)、reverse
reverse 是否反向,reverse=Ture表示反向。
(4)、注意:
sorted(dic.iteritems(), key=lambda d:d[1], reverse = False )将每一项dic.iteritems()键值对的元祖进行迭代,每一项都作为参数传入key()函数(我说的是这个:key=lambda d:d[1],)中。
4、回顾
lis = ['a','bc','c','asd','33','d']
print sorted(lis) #['33', 'a', 'asd', 'bc', 'c', 'd']
依次比字母, 如boat < boot <cap < card < cat < to < too< two < up
5.问题
具体实例可参考:[**python的排序函数sort,sorted在列表排序和字典排序中的应用详解和举例**](http://wangwei007.blog.51cto.com/68019/1100742)
现在有这种情况,排序中排序。如大题号排序,然后大题对应的小题号也排序,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
lis = [{'Big':3, 'small':2},{'Big':3, 'small':4},{'Big':2, 'small':2}, {'Big':3, 'small':1},{'Big':2, 'small':1},{'Big':1, 'small':1}]# 大题号排序li = sorted(lis, key=lambda s: s['Big'])# 输出:#[{'small': 1, 'Big': 1}, {'small': 2, 'Big': 2}, {'small': 1, 'Big': 2}, {'small': 2, 'Big': 3}, {'small': 4, 'Big': 3}, {'small': 1, 'Big': 3}]# 小题号排序:sort_ff = []no = set([i['Big'] for i in li])for obj in no:li_ = []for i in ff:if i['Big'] == obj:li_.append(i)l = sorted(li_, key=lambda s: s['small'])for j in l:sort_ff.append(j)# 输出结果:[{'small': 1, 'Big': 1}, {'small': 1, 'Big': 2}, {'small': 2, 'Big': 2}, {'small': 1, 'Big': 3}, {'small': 2, 'Big': 3}, {'small': 4, 'Big': 3}] |
善用sort() 或 sorted(), a.sort() 已改变其结构,b = a.sort() 是错误的写法! 而 sorted(a, ...)并没有改变a的结构。
======================================
- #-*- encoding=utf-8 -*-
- import operator
- #按字典值排序(默认为升序)
- x = {1:2, 3:4, 4:3, 2:1, 0:0}
- sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1))
- print sorted_x
- #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]
- #如果要降序排序,可以指定reverse=True
- sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1), reverse=True)
- print sorted_x
- #[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]
- #或者直接使用list的reverse方法将sorted_x顺序反转
- #sorted_x.reverse()
- #取代方法是,用lambda表达式
- sorted_x = sorted(x.iteritems(), key=lambda x : x[1])
- print sorted_x
- #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)]
- sorted_x = sorted(x.iteritems(), key=lambda x : x[1], reverse=True)
- print sorted_x
- #[(3, 4), (4, 3), (1, 2), (2, 1), (0, 0)]
- #包含字典dict的列表list的排序方法与dict的排序类似,如下:
- x = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
- sorted_x = sorted(x, key=operator.itemgetter('name'))
- print sorted_x
- #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]
- sorted_x = sorted(x, key=operator.itemgetter('name'), reverse=True)
- print sorted_x
- #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}]
- sorted_x = sorted(x, key=lambda x : x['name'])
- print sorted_x
- #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}]
- sorted_x = sorted(x, key=lambda x : x['name'], reverse=True)
- print sorted_x
- #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}]
深入Python(1): 字典排序 关于sort()、reversed()、sorted()的更多相关文章
- Python中的排序方法sort(),sorted(),argsort()等
python 列表排序方法sort.sorted技巧篇 转自https://www.cnblogs.com/whaben/p/6495702.html,学习参考. Python list内置sort( ...
- python 字典排序 关于sort()、reversed()、sorted()
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- <转>python字典排序 关于sort()、reversed()、sorted()
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- python中字典排序
一.Python的排序 1.reversed() 这个很好理解,reversed英文意思就是:adj. 颠倒的:相反的:(判决等)撤销的 print list(reversed(['dream','a ...
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- Python:如何排序(sort)
一.前言 对Python的列表(list)有两个用于排序的方法: 一个是内建方法list.sort(),可以直接改变列表的内容: >>> list1 = [9,8,7,6,5] &g ...
- python 列表排序方法sort、sorted技巧篇
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...
- python 两种排序方法 sort() sorted()
python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...
- [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)
python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...
随机推荐
- CDQZ Day1
#include<cassert> #include<cstdio> #include<vector> using namespace std; ,maxt=,ma ...
- C++ STL之Vector
向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器. vector 属于STL(Standard Template Library, 标准模板库)中的一种自定义的 ...
- php session_id() session_name()
1.Session.use_cookies:默认值为"1",代表SessionID使用Cookie来传递,反之就是用Query_String来传递 2.Session.name:这 ...
- PIE SDK算法的异步调用
1.算法功能简介 异步方法一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作.异步方法通常会在另外一个线程中,“真实”地执行着.整个过程,不会阻碍调用者的工作. PIE SDK支持算法功能的执 ...
- opencv java小应用:比较两个图片的相似度
package com.company; import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.ope ...
- Oracle 查询单挑语句运行时间
pl/sql 不考虑网络IO等影响 declare guidname ):='255fc3db-815a-46c1-9187-ec0256305335'; timespa timestamp:=CUR ...
- Java - 打印质数(使用控制嵌套循环跳转)
使用控制嵌套循环跳转,打印输出10 ~ 150之间的质数 代码: public class Testcotinue { public static void main(String[] args) { ...
- UNIX文件mode_t详解 ... S_IRUSR
打开文件.新建文件和关闭文件操作 打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作.打开文件的一般形式是: ope ...
- Vim as a Python IDE
参考视频:http://v.youku.com/v_show/id_XNDY4NTM4NzY0.html 好的,在我们默认的centos6的操作系统中使用的python2,我们一般会再去安装一个pyt ...
- Java关键字final、static使用总结 (final static在容器中不可以改变容器但可以改变存放)
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效 ...