python字典统计排序1_python 字典排序

字典,形如 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}

28093750-d8f84f456edb4dc0af6cb4b69dac83a9.png

注意

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

28105610-1cb54659575141879c5a14f74a52c732.png

案例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})]

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

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

copycode.gif

>>> 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})]

copycode.gif

两个函数

1.lambda

功能: 创建匿名函数

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

lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def则会把函数对象赋值给一个变量

lambda它只是一个表达式,而def则是一个语句

案例:

28094652-c3878f6e1e514c329320e7c96ada7f76.png

2.iteritems()

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

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

案例:

28095500-bdfe2d7666f44f2aa74b49b28e4c98ed.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值