NJU1healer的个人博客分享 http://blog.sciencenet.cn/u/NJU1healer

博文

Python中OrderedDic与sorted和lambda函数结合使用

已有 2165 次阅读 2020-8-23 17:15 |个人分类:Python|系统分类:科研笔记

(一)有序字典OrderedDic()

       很多人认为python中的字典是无序的,因为它是按照hash来存储的,但是python中有个模块collections(英文,收集、集合),里面自带了一个子类

       OrderedDict,实现了对字典对象中元素的排序。请看下面的实例:


 1 import collections

 2 print "Regular dictionary"

 3 d={}

 4 d['a']='A'

 5 d['b']='B'

 6 d['c']='C'

 7 for k,v in d.items():

 8     print k,v

 9 

10 print "\nOrder dictionary"

11 d1 = collections.OrderedDict()

12 d1['a'] = 'A'

13 d1['b'] = 'B'

14 d1['c'] = 'C'

15 d1['1'] = '1'

16 d1['2'] = '2'

17 for k,v in d1.items():

18     print k,v

19 

20 输出:

21 Regular dictionary

22 a A

23 c C

24 b B

25 

26 Order dictionary

27 a A

28 b B

29 c C

30 1 1

31 2 2


       可以看到,同样是保存了ABC等几个元素,但是使用OrderedDict会根据放入元素的先后顺序进行排序。所以输出的值是排好序的。

       OrderedDict对象的字典对象,如果其顺序不同那么Python也会把他们当做是两个不同的对象,请看事例:


 1 print 'Regular dictionary:'

 2 d2={}

 3 d2['a']='A'

 4 d2['b']='B'

 5 d2['c']='C'

 6 

 7 d3={}

 8 d3['c']='C'

 9 d3['a']='A'

10 d3['b']='B'

11 

12 print d2 == d3

13 

14 print '\nOrderedDict:'

15 d4=collections.OrderedDict()

16 d4['a']='A'

17 d4['b']='B'

18 d4['c']='C'

19 

20 d5=collections.OrderedDict()

21 d5['c']='C'

22 d5['a']='A'

23 d5['b']='B'

24 

25 print  d1==d2

26 

27 输出:

28 Regular dictionary:

29 True

30 

31 OrderedDict:

32 False


 再看几个例子:


dd = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

#按key排序

kd = collections.OrderedDict(sorted(dd.items(), key=lambda t: t[0]))

print kd

#按照value排序

vd = collections.OrderedDict(sorted(dd.items(),key=lambda t:t[1]))

print vd

#输出

OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

对函数进行简单说明(关键)

语法

sorted(d.items(), key=lambda x: x[1])

参数

d.items() 为待排序的对象

key=lambda 变量:变量[维数]

key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。其中x:x[ ]字母可以随意修改,排序方式按照中括号[]里面的维度进行排序,[0]按照第一维排序,[2]按照第三维排序,依次类推。


示例:

#数据维数以数字来表达:

d = {"a":15,"b":16,"c":37,"d":24}

b=sorted(d.items(), key=lambda x: x[1])

print(b)

输出:

[('a', 15), ('b', 16), ('d', 24), ('c', 37)]


示例:

#维数以字符串表达

a = [{'name':'a','age':15},{'name':'b','age':31},{'name':'c','age':28}]

b=sorted(alist,key=lambda x:x['age'],reverse=True)

print(b)

输出:

[{'name': 'b', 'age': 31}, {'name': 'c', 'age': 28}, {'name': 'a', 'age': 15}]


附:

sort与sorted的区别

sorted()函数与lambda()匿名函数

点滴分享,福泽你我!Add oil!

【参考】

https://www.cnblogs.com/gide/p/6370082.html



https://blog.sciencenet.cn/blog-3428464-1247568.html

上一篇:Spyder的IDE中关于“from module import *” 警告与正反斜杠
下一篇:[转载]神经网络梯度消失与梯度爆炸问题
收藏 IP: 211.162.81.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

全部作者的其他最新博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-25 14:43

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部