python(46):对字典进行排序

原文地址:

http://www.cnblogs.com/kaituorensheng/archive/2012/08/07/2627386.html

字典,形如 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 "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
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})]

两个函数

1.lambda

功能: 创建匿名函数

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

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

案例:

2.iteritems()

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

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

案例:

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

时间: 2024-08-25 18:53:57

python(46):对字典进行排序的相关文章

python学习:字典排序

按字典值排序 按照字典value排序,类似sort -k 命令 import operator x= {1:2,3:4,4:3,2:1,0:0} sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) In [38]: sorted_x Out[38]: [(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)] sorted_y = sorted(x.iteritems(), key=operator.it

Python对列表中字典元素排序

问题起源 json对象a,b a = '{"ROAD": [{"id": 123}, {"name": "no1"}]}' b = '{"ROAD": [{"name": "no1"}, {"id": 123}]}' 特点:a,b对应的Python的对象中键对应的键值——列表中包含着相同的字典元素,但是唯一不同的是顺序不同.如果忽略顺序,如何判断两

Python字典按值排序、包含字典的列表按字典值排序的方法

#-*- encoding=utf-8 -*- import operator #按字典值排序(默认为升序) x = {1:2, 3:4, 4:3, 2:1, 0:0} sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) print sorted_x #[(0, 0), (2, 1), (1, 2), (4, 3), (3, 4)] #如果要降序排序,可以指定reverse=True sorted_x = sorted(x.i

Python中的字典排序

Python中比较常用的排序有两个函数, 一.定义 (1)一个是List数据结构中的sort >>> help(list.sort)Help on method_descriptor: sort(...) L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*; cmp(x, y) -> -1, 0, 1 The sort() method takes optional arguments for co

对python的字典的排序

对字典按键/按值排序,用元组列表的形式返回,同时使用lambda函数来进行: sorted(iterable[, cmp[, key[, reverse]]] iterable:是可迭代类型;cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;reverse:排序规则. reverse = True 或者 reverse = False,有默认值.返回值:是一个经过排序的可迭代类型,与iterab

python字典的排序,按key排序和按value排序---sorted()

>>> d{'a': 5, 'c': 3, 'b': 4} >>> d.items()[('a', 5), ('c', 3), ('b', 4)] 字典的元素是成键值对出现的,字典的排序可用sorted,用关键字key指定排序依据的值--key或者value 按照值排序: #把d.items()所对应的列表的每个元祖的第二个元素(value)传到lambda函数进行排序>>> s=sorted(d.items(),key=lambda x:x[1])&

python基础之字典及字符

python基础之字典及字符串处理 本节内容 字典介绍及内置方法 字符串处理 1.字典介绍及内置方法 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.可哈希表示key必须是不可变类型,如:数字.字符串.元组. 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象结合,字典是无序的对象集合.两者

python数组,字典的一些操作

新手刚刚开始学习python,如果有写错或写的不好的地方,请大家多多指教!在python中输出当前系统import sysprint(sys.platform)输出当前在那个目录import osos.getcwd()输出一个变量有多少位s = 'spam'len(s)替换变量的值s = 'z' + s[1:]查找变量内的值s.find('pa')  #找到会返回1,找不到会返回-1临时修改变量的值s.replace('pa', 'XZC')  #将变量内pa临时替换成XZC使用exec运行文件

Python&lt;8&gt;有关字典

Python中的字典是完全不同的东西,它们不是序列,没有顺序,只是一种映射.内部的元素以逗号分开,以大括 号包围.它们不是通过位置而是通过键来存储的,也具有可变性,可以就地的改变,增大或减小. 主要属性: <1>通过键而不是偏移量来读取 <2>任意对象的无序集合 <3>可变长.异构.任意嵌套 <4>属于可变映射 <5>对象引用表 常见操作 D={ }  空字典 'name' in D   成员存在测试 D.keys()     方法:键 D.va

Python中的字典详解

Python中的字典是python的一种数据结构,它的本质是key和value以及其对应关系的一种集合,一个key可以对应一个多个value.合理的使用字典能给我们编程带来很大的方便. -----python中的数据类型 -----python中的字符串操作 python3.0以上,print函数应为print(),不存在dict.iteritems()这个函数. 在python中写中文注释会报错,这时只要在头部加上# coding=gbk即可 #字典的添加.删除.修改操作dict = {"a&