Python排序,针对列表,字典

Python的内部容器,大概分为:tuple,set,list,dict,就排序来说,对列表和字典的排序需求较多,tuple主要作为不可变容器,set用来去重复,下面把list和dict常见排序方法总结一下:

一、列表

1、 list排序很简单,主要看list的元素组成,如果元素是由单值组成,比如下面的方法:

>>> a = [1,2,5,3,4]
>>> a.sort()
>>> print a
[1, 2, 3, 4, 5]

list本身自带sort()方法,这种方法是在list本身进行操作,也就是说改变了a的原始结构

2、list元素是由元组组成的,要求按照元组的某一列进行排序,示例如下:

>>> a=[('c',1),('b',2),('a',3)]
>>> b=sorted(a,key = lambda ss:ss[0])
>>> b
[('a', 3), ('b', 2), ('c', 1)]
>>> a
[('c', 1), ('b', 2), ('a', 3)]
>>> 

采用Python的内建函数sorted(),这种很明显是把排序结果放到了b列表中,但是实际上并不会改变a数据的原始结构,如果我们依然采用列表的sort()方法呢?示例如下:

>>> a
[('c', 1), ('b', 2), ('a', 3)]
>>> a.sort(key = lambda x:x[0])
>>> a
[('a', 3), ('b', 2), ('c', 1)]
>>> 

还有一个方法不过使用cmp参数:

>>> c=sorted(a,cmp = lambda x,y:cmp(x[1],y[1]),reverse = 0)
>>> c
[('c', 1), ('b', 2), ('a', 3)]
>>> 

cmp是比较,X[1],y[1]表示第一和第二个元素的第二列,reverse=0表示不进行反转,可以reverse=False,两者一样效果,当然reverse不写也可以,默认为False

3、使用operator模块

>>> a
[('c', 1), ('b', 2), ('a', 3)]
>>> b = sorted(a,key=itemgetter(0))
>>> b
[('a', 3), ('b', 2), ('c', 1)]

二、字典排序

字典的话,主要是按照键或值来排序

>>> b
[('a', 3), ('b', 2), ('c', 1)]
>>> dic = {'a':3,'b':2,'c':1}
>>> sorted(dic.iteritems(),key = lambda aa:aa[1],reverse=False)
[('c', 1), ('b', 2), ('a', 3)]
>>> 

还有的方法是直接用for循环来做,但我觉得直接sorted()已经很清晰了。

总结:

一般做排序,list来说可以根据是否要改变原始数据结构来选择不同的方法,字典就用sorted即可,关于效率,其实我个人感觉用lambda的key方法较快。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 07:43:34

Python排序,针对列表,字典的相关文章

python笔记03列表 字典

1.for,while循环遍历 2.添加元素 append 通过append可以向列表添加元素 #定义变量A,默认有3个元素 A = ['xiaoWang','xiaoZhang','xiaoHua'] print("-----添加之前,列表A的数据-----") for tempName in A: print(tempName) #提示.并添加元素 temp = input('请输入要添加的学生姓名:') A.append(temp) print("-----添加之后,列

python字符串/元组/列表/字典互转

#-*-coding:utf-8-*- #1.字典dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 'str'> {'age': 7, 'name': 'Zara', 'class': 'First'}print type(str(dict)), str(dict) #字典可以转为元组,返回:('age', 'name', 'class')print tuple(dict)#字典可以转为元组,返回:(7,

【转】python字符串/元组/列表/字典互转

#-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 'str'> {'age': 7, 'name': 'Zara', 'class': 'First'} print type(str(dict)), str(dict) #字典可以转为元组,返回:('age', 'name', 'class') print tuple(dict) #字典可以转为元组,返回

python之字符串,列表,字典内置方法总结

目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 数字类型的内置方法 整型/浮点型 加 + 减 - 乘 * 除 / 取余 % 余数取整 // 字符串类型的内置方法 掌握 熟悉 了解 按索引取值 ,strs[0] lstrip,rstrip find,rfind 切片,str[::-1] lower,upper index,rindex 长度,len[strs] startswith,endswith count 成员运算,print{" 'llo' i

python基础 filter ,列表,字典,集合 中根据 条件 筛选 数据

from random import randint data = [randint(-10, 10) for _ in xrange(10)] print data e = filter(lambda x: x >= 0, data) print e 或者使用  列表解析       速度快 [x for x in data if x >= 0] 对字典的筛选 d = {x: randint(60, 100) for x in xrange(1, 21)} print d print {k:

[python 笔记2]列表、字符串、字典(list?string?map?)

1.列表 1)python 中的列表初始化 list=[0,1,2,3,4,5,6,7,8,9] 变量名=[,,,,],当然初始列表可以为空 ps:看到[],熟悉C++的同学不禁想到了熟悉的数组,那么python中的列表和数组之间有什么区别联系呢? 在python中我们依然可以使用下标来操作列表,就像操作数组一样.但是,如果python只给我提供如此简(keng)单(die)的操作那怎么能体现出python的简介强大呢? 2)分片 分片是指使用索引来指定访问列表的范围,来访问多个元素,而不是仅仅

Python数据结构之列表元组字典的用法

数据结构的含义 在学习数据结构之前,我们先来了解下数据结构的含义.数据结构是通过某种方式(例如对元素进行编号)组织在一起的数据元素的集合,这些数据元素可以是数字或者字符,甚至可以是其他数据结构.在Python语言中,最基本的数据结构是序列(sequence).序列中的每个元素被分配一个序号----即元素的位置,称为索引或下标,索引从0开始递增. 典型的序列包括列表.元组和字符串.其中,列表是可变的(可修改),而元组和字符串是不可变的(一旦创建了就是固定的).列表.元组和字符串也是较常用的数据结构

Python数据结构:列表、元组和字典

在Python中有三种内建的数据结构——列表list.元组tuple和字典dict 列表中的项目包括在方括号中,项目之间用逗号分割 元组和列表十分类似,只不过元组和字符串一样是不可变的 即你不能修改元组.元组通过圆括号中用逗号分割的项目定义. 元组最通常的用法是用在打印语句中 age = 22 name = 'Swaroop' print '%s is %d years old' % (name, age) print 'Why is %s playing with that python?'

python学习之列表、元组、集合、字典随笔

数 据  结 构 一.[列表]操作列表的方法如下:  列表是可变序列,通常用于存放同类项目的集合. list_one = [1, 2, 3, 4, True, False, 'pig', 1, 1, 1, 1, 0, 0] list_two = [1, 8, 10, 50, 400, 1000, 600, 2, 3, 99] # 1.添加元素,在列表的末尾添加一个元素 list_one.append('U') print(list_one) # 2.扩展列表,使用可迭代对象中的所有元素进行扩展

python :列表 字典 集合 类 ----局部变量可以改全局变量

#列表 字典 集合 类 ----局部变量可以改全局变量,除了整数和字符串 names=["alex","jack","luck"] def func(names): names[0]='金角大王' print("inside name:" ,names) func(names) print (names) #字符串 name='jack' name1=name name='jack_chen' print(name,name1