概述
python下的排序可以很方便的调用各种方法来解决。
另,由于字符串可以简单的转换成list,因此字符串排序也可以解决。
将字符串转换成list (http://piziyin.blog.51cto.com/2391349/568426)
>>> import string
>>> str = 'abcde'
>>> list = list(str)
>>> list
['a', 'b', 'c', 'd', 'e']
>>> str
'abcde'
>>> str_convert = ''.join(list)
>>> str_convert
'abcde'
>>>
但如果是最简单的字符串逆序,那么可以直接通过改变下标来实现。(http://hi.baidu.com/fishhatta/item/0767d518f78c381fe2f98650)
>>>str[::-1]
'edcba'
python中dict和list排序
1、list排序列表的排序是python内置功能,自身含有sort方法
如:
>>> s=[2,1,3,0]
>>> s.sort()
[0, 1, 2, 3]
2、dict排序
对字典的排序,因为每一个项包括一个键值对,所以要选择可比较的键或值进行排序
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)]
3、元组列表排序
如
>>> li=[(2,'a'),(4,'b'),(1,'d')]
>>> li.sort()
[(1, 'd'), (2, 'a'), (4, 'b')]
如果字典按项的第一个元素排序的话,可以转换成元组列表来进行
>>> d={"ok":1,"no":2}
>>> tt=[tuple(item) for item in d.items()]
>>> tt.sort()
[('no', 2), ('ok', 1)]
4 其他人的实现,留住备忘
下面是一个结构的例子
>>> class test:def __init__(self,a,b):
self.a = a
self.b = b
>>> test1 = test(5,25)
>>> test2 = test(10,15)
>>> tests = [test1,test2]
>>> sorted(tests,cmp = lambda x,y: cmp(x.a, y.a))
>>> result = sorted(tests,key = lambda d:d.a)
# (IMHO) the simplest approach:
def sortedDictValues1(adict):
items = adict.items()
items.sort()
return [value for key, value in items]
# an alternative implementation, which
# happens to run a bit faster for large
# dictionaries on my machine:
def sortedDictValues2(adict):
keys = adict.keys() keys.sort() return [dict[key] for key in keys]
# a further slight speed-up on my box
# is to map a bound-method:
def sortedDictValues3(adict):
keys = adict.keys()
keys.sort()
return map(adict.get, keys)
各种代码实现:
python 列表(list)和字典(dict)数据排序
# 这个类用来演示如何对自定义对象进行排序
class Sortobj:
a = 0
b = ''
def __init__(self, a, b):
self.a = a
self.b = b
def printab(self):
print self.a, self.b
# 演示对字符串列表进行排序
samplelist_str = ['blue','allen','sophia','keen']
print samplelist_str
samplelist_str.sort()
print samplelist_str
print 'n'
# 演示对整型数进行排序
samplelist_int = [34,23,2,2333,45]
print samplelist_int
samplelist_int.sort()
print samplelist_int
print 'n'
# 演示对字典数据进行排序
sampledict_str = {'blue':'5555@sina.com',
'allen':'222@163.com',
'sophia':'4444@gmail.com',
'ceen':'blue@263.net'}
print sampledict_str
# 按照key进行排序
print sorted(sampledict_str.items(), key=lambda d: d[0])
# 按照value进行排序
print sorted(sampledict_str.items(), key=lambda d: d[1])
# 构建用于排序的类实例
obja = Sortobj(343, 'keen')
objb = Sortobj(56, 'blue')
objc = Sortobj(2, 'aba')
objd = Sortobj(89, 'iiii')
print 'n'
samplelist_obj = [obja, objb, objc, objd]
# 实例对象排序前
for obj in samplelist_obj:
obj.printab()
print 'n'
# 按照对象的a属性进行排序
samplelist_obj.sort(lambda x,y: cmp(x.a, y.a))
for obj in samplelist_obj:
obj.printab()
print 'n'
# 按照对象的b属性进行排序
samplelist_obj.sort(lambda x,y: cmp(x.b, y.b))
for obj in samplelist_obj:
obj.printab()
Python: sort,sorted,OrderedDict的用法
python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数。
sort函数和sorted函数唯一的不同是,sort是在容器内排序,sorted生成一个新的排好序的容器。
对于一个简单的数组 L=[5,2,3,1,4].
sort: L.sort()
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:待排序的可迭代类型的容器;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
如果是一个多维的列表 L=[(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)].
有三种选择对这个多维列表进行排序
- 利用cmp函数
sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
- 利用key
sorted(L, key=lambda x:x[1]);
L.sort(key=lambda x:x[1]);
- 反序
以上几种排序均可加上参数reverse.
例如 sorted(reverse=True), L.sort(reverse=True). 或者改成False
OrderedDict是collections中的一个包,能够记录字典元素插入的顺序,常常和排序函数一起使用来生成一个排序的字典。
比如,比如一个无序的字典
d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}
通过排序来生成一个有序的字典,有以下几种方式
collections.OrderedDict(sorted(d.items(),key = lambda t:t[0]))
或者
collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))
或者
collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))
- 附:python内置类型
- 1、list:列表(即动态数组,C++标准库的vector,但可含不同类型的元素于一个list中)
- a = ["I","you","he","she"] #元素可为任何类型。
- 下标:按下标读写,就当作数组处理
- 以0开始,有负下标的使用
- 0第一个元素,-1最后一个元素,
- -len第一个元素,len-1最后一个元素
- 取list的元素数量
- len(list) #list的长度。实际该方法是调用了此对象的__len__(self)方法。
- 创建连续的list
- L = range(1,5) #即 L=[1,2,3,4],不含最后一个元素
- L = range(1, 10, 2) #即 L=[1, 3, 5, 7, 9]
- list的方法
- L.append(var) #追加元素
- L.insert(index,var)
- L.pop(var) #返回最后一个元素,并从list中删除之
- L.remove(var) #删除第一次出现的该元素
- L.count(var) #该元素在列表中出现的个数
- L.index(var) #该元素的位置,无则抛异常
- L.extend(list) #追加list,即合并list到L上
- L.sort() #排序
- L.reverse() #倒序
- list 操作符:,+,*,关键字del
- a[1:] #片段操作符,用于子list的提取
- [1,2]+[3,4] #为[1,2,3,4]。同extend()
- [2]*4 #为[2,2,2,2]
- del L[1] #删除指定下标的元素
- del L[1:3] #删除指定下标范围的元素
- list的复制
- L1 = L #L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的
- L1 = L[:] #L1为L的克隆,即另一个拷贝。
- list comprehension
- [ <expr1> for k in L if <expr2> ]
- 2、dictionary: 字典(即C++标准库的map)
- dict = {'ob1':'computer', 'ob2':'mouse', 'ob3':'printer'}
- 每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。
- 键是唯一的,字典只认最后一个赋的键值。
- dictionary的方法
- D.get(key, 0) #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常
- D.has_key(key) #有该键返回TRUE,否则FALSE
- D.keys() #返回字典键的列表
- D.values() #以列表的形式返回字典中的值,返回值的列表中可包含重复元素
- D.items() #将所有的字典项以列表方式返回,这些列表中的每一项都来自于(键,值),但是项在返回时并没有特殊的顺序
- D.update(dict2) #增加合并字典
- D.popitem() #得到一个pair,并从字典中删除它。已空则抛异常
- D.clear() #清空字典,同del dict
- D.copy() #拷贝字典
- D.cmp(dict1,dict2) #比较字典,(优先级为元素个数、键大小、键值大小)
- #第一个大返回1,小返回-1,一样返回0
- dictionary的复制
- dict1 = dict #别名
- dict2=dict.copy() #克隆,即另一个拷贝。
- 3、tuple:元组(即常量数组)
- tuple = ('a', 'b', 'c', 'd', 'e')
- 可以用list的 [],:操作符提取元素。就是不能直接修改元素。
- 4、string: 字符串(即不能修改的字符list)
- str = "Hello My friend"
- 字符串是一个整体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。
- 子字符串的提取
- str[:6]
- 字符串包含判断操作符:in,not in
- "He" in str
- "she" not in str
- string模块,还提供了很多方法,如
- S.find(substring, [start [,end]]) #可指范围查找子串,返回索引值,否则返回-1
- S.rfind(substring,[start [,end]]) #反向查找
- S.index(substring,[start [,end]]) #同find,只是找不到产生ValueError异常
- S.rindex(substring,[start [,end]])#同上反向查找
- S.count(substring,[start [,end]]) #返回找到子串的个数
- S.lowercase()
- S.capitalize() #首字母大写
- S.lower() #转小写
- S.upper() #转大写
- S.swapcase() #大小写互换
- S.split(str, ' ') #将string转list,以空格切分
- S.join(list, ' ') #将list转string,以空格连接
- 处理字符串的内置函数
- len(str) #串长度
- cmp("my friend", str) #字符串比较。第一个大,返回1
- max('abcxyz') #寻找字符串中最大的字符
- min('abcxyz') #寻找字符串中最小的字符
- string的转换
- float(str) #变成浮点数,float("1e-1") 结果为0.1
- int(str) #变成整型, int("12") 结果为12
- int(str,base) #变成base进制整型数,int("11",2) 结果为2
- long(str) #变成长整型,
- long(str,base) #变成base进制长整型,
- 字符串的格式化(注意其转义字符,大多如C语言的,略)
- str_format % (参数列表) #参数列表是以tuple的形式定义的,即不可运行中改变
- >>>print ""%s's height is %dcm" % ("My brother", 180)
- #结果显示为 My brother's height is 180cm
- 。。。。。。。。。。。。。。。。。。
- list 和 tuple 的相互转化
- tuple(ls)
- list(ls)
参考以下博客:
http://www.douban.com/note/13460891/
http://blog.csdn.net/songchunyi/article/details/6543369
http://blog.csdn.net/songchunyi/article/details/6543369
http://stqdd.com/archives/427
http://blog.csdn.net/business122/article/details/7536991
最后
以上就是酷炫早晨为你收集整理的python 中的dict和list 排序 python 列表(list)和字典(dict)数据排序 Python: sort,sorted,OrderedDict的用法的全部内容,希望文章能够帮你解决python 中的dict和list 排序 python 列表(list)和字典(dict)数据排序 Python: sort,sorted,OrderedDict的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复