博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python(46):对字典进行排序,多键值排序
阅读量:6151 次
发布时间:2019-06-21

本文共 2184 字,大约阅读时间需要 7 分钟。

字典,形如 dic = {'a':1 , 'b':2 , 'c': 3},字典中的元素没有顺序,所以dic[0]是有语法错误的。并且不可以有重复的键值,所以 dic.add['c'] = 4后,字典变成 {'a':1 , 'b':2 , 'c': 4}.

 

待解决问题

如何根据需要可以根据“键”或“键值”进行不同顺序的排序?

函数原型

sorted(dic,value,reverse)

  • dic为比较函数,value 为排序的对象(这里指键或键值),
  • reverse:注明升序还是降序,True--降序,False--升序(默认)

案例1

dic = {'a':3 , 'b':2 , 'c': 1}

    

注意

排序之后原字典没有变,顺序依旧

     

案例2

 

>>> a_dic = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}}>>> dict= sorted(a_dic.iteritems(), key=lambda d:d[1]['val'], reverse = True)>>> dict[('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1})]

 

例子中“键-值”对中的值是字典,例子对其进行排序。

那如果“键值”对中值字典的某一特定键不存在,咋处理呢,参考

>>> a = {'a':{'val':3}, 'b':{'val':4}, 'c':{'val':1}, 'd':{'val2':0}}>>> a{'a': {'val': 3}, 'c': {'val': 1}, 'b': {'val': 4}, 'd': {'val2': 0}}>>> dict= sorted(a.iteritems(), key=lambda d:d[1]['val'], reverse = True)Traceback (most recent call last):  File "
", line 1, in
File "
", line 1, in
KeyError: 'val'>>> dict= sorted(a.iteritems(), key=lambda d:d[1].get('val',0), reverse = True)>>> dict[('b', {'val': 4}), ('a', {'val': 3}), ('c', {'val': 1}), ('d', {'val2': 0})]

案例3:按照多个键值进行排序

先按照cpu,然后按照money

a = {
'flavor15': {
'cpu': '2', 'memory': 4}, 'flavor14': {
'cpu': '2', 'memory': 2}, 'flavor8': {
'cpu': '1', 'memory': 1}, 'flavor13': {
'cpu': '1', 'memory': 4}, 'flavor12': {
'cpu': 2, 'memory': 2}}mm = sorted(a.items(),key=lambda item:(int(item[1]["cpu"]), int(item[1]["memory"])),reverse=True)sorted:[('flavor15', {
'cpu': '2', 'memory': 4}), ('flavor14', {
'cpu': '2', 'memory': 2}), ('flavor12', {
'cpu': 2, 'memory': 2}), ('flavor13', {
'cpu': '1', 'memory': 4}), ('flavor8', {
'cpu': '1', 'memory': 1})]

两个函数

1.lambda

功能: 创建匿名函数

区别: 和def函数定义,以下两点区别

  • lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量
  • lambda它只是一个表达式,而def则是一个语句

案例:

    

2.iteritems()

功能: iteritems()以迭代器对象返回字典键值对

区别: 和item相比:items以列表形式返回字典键值对

案例:

    

注释: 在函数sorted(dic.iteritems(), key = lambda asd:asd[1])中,第一个参数传给第二个参数“键-键值”,第二个参数取出其中的键([0])或键值(1])

 

转载地址:http://tkwfa.baihongyu.com/

你可能感兴趣的文章
MIT自然语言处理第三讲:概率语言模型(第四部分)
查看>>
使用python处理selenium中的鼠标悬停问题
查看>>
Oracle使用order by排序关于null值处理
查看>>
action间传多个参数时注意问题
查看>>
Vue2.0环境搭建和测试demo
查看>>
Windows 下安装Lua: 使用Visual Studio 2017来编译安装Lua
查看>>
JS使用默认图片代替页面上无法显示的图片
查看>>
Codeforces 918C - The Monster
查看>>
2016 Russian Code Cup (RCC 16), Final Round B - Cactusophobia
查看>>
左边定宽,右边自适应布局的几种方法
查看>>
Electron学习入门
查看>>
Chapter 2、Eclipse(19th,Feb1)
查看>>
Vue和SuperSlide做轮播效果
查看>>
Spring源码分析——BeanFactory体系之接口详细分析
查看>>
你需要知道的三个 CSS3技巧(转)
查看>>
Extjs4 img使用
查看>>
javascript 异步编程二(转载 from 司徒正美)
查看>>
防蓝光镜片
查看>>
洛谷 P1147 连续自然数和 (滑动窗口)
查看>>
Linux 小知识翻译 - 「为什么安全是互联网的问题?」
查看>>