问题:根据某个或某几个字典字段来排序Python列表

answer: 通过使用operator 模块的itemgetter 函数,可以非常容易的排序这样的数据结构

eg:

  rows = [
  {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
  {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
  {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
  {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
  ]

  1.itemgetter()

  from operator import itemgetter

  1).print(rows_by_fname)

  >>>rows_by_fname = sorted(rows, key=itemgetter('fname'))

  >>>print(rows_by_fname)

  [{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},
  {'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
  {'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
  {'fname': 'John', 'uid': 1001, 'lname': 'Cleese'}]

  2).print(rows_by_uid) 

  >>>rows_by_uid = sorted(rows, key=itemgetter('uid'))

  >>>print(rows_by_uid)
  [{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},
  {'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
  {'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
  {'fname': 'Big', 'uid': 1004, 'lname': 'Jones'}]

  3).itemgetter() 函数也支持多个keys

  itemgetter() 函数也支持多个keys,比如下面的代码
  >>>rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
  >>>print(rows_by_lfname)

  [{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
  {'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},
  {'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},
  {'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'}]

  在上面例子中,rows被传递给接受一个关键字参数的sorted()内置函数。

  这个参数是callable类型,并且从rows中接受一个单一元素,然后返回被用来排序的值。

  itemgetter()就是负责创建这个callable对象的。

  如果传多个参数给itemgetter(),它生成的callabe对象会返回一个包含所有值的元组,sort()函数会根据元组中元素顺序去排序。

  2.lambda表达式

    itemgetter()有时候可以用lambda表达式代替

    rows_by_fname = sorted(rows, key=lambda r: r['fname'])
    rows_by_lfname = sorted(rows, key=lambda r: (r['lname'],r['fname']))

    这种方案也不错。但是,使用itemgetter() 方式会运行的稍微快点。因此,如果
    你对性能要求比较高的话就使用itemgetter() 方式。

  3.min(),max()

    最后,不要忘了这节中展示的技术也同样适用于min() 和max() 等函数。比如:
    >>> min(rows, key=itemgetter('uid'))
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}
    >>> max(rows, key=itemgetter('uid'))
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}

Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表的更多相关文章

  1. Python的operator.itemgetter函数和sorted函数

    写这篇文章的目的是之前在<机器学习实战>用Python3实现KNN算法时用到的几个函数不太懂, 地址: 1- https://github.com/hitergelei/Self-Lear ...

  2. python中operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...

  3. Python笔记(二):列表+列表数据处理+函数

    #才疏学浅,难免有不恰当之处,请不吝指正,谢谢. #适合初学者. 列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组.例如: user = ["张三","李 ...

  4. python之itemgetter函数:对字典列表进行多键排序

    itemgetter函数:对字典列表进行多键排序 from operator import itemgetter list_people = [ {'name': 'Mike', 'age': 22, ...

  5. python中列表和字典常用方法和函数

    Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...

  6. Python的字符串和列表和字典的方法/函数

    字符串 S.find()#可指定范围查找字串,返回索引值,否则返回-1 S.index()#同find,只是找不到的之后返回异常 S.count()#返回找到字串的个数 S.lower()#转小写 S ...

  7. python 小技巧(glob,guid,序列化,压缩字符,有序字典,sorted函数,分片)

    1.glob模块 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:”*”, “?”, “[]”.”* ...

  8. Python基础学习笔记(八)常用字典内置函数和方法

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...

  9. python之列表作为函数的参数

    函数参数为 列表或者字典 传递一个列表,例如 [1, 2, 3] 将此传给函数get_sum() 求出 各个元素之和 传递一个字典,打印出key/value的对应关系表: #!/usr/bin/env ...

随机推荐

  1. 23种设计模式之观察者模式(Observer)

    观察者模式又称为发布—订阅模式.模型—视图模式.源-监听器模式或从属者(dependents)模式,是一种对象的行为型模式.它定义了对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时,其相 ...

  2. 关于IE和360安全浏览器如何添加百度搜索为默认的搜索引擎

    以IE和360浏览器为例,细心的人可能会发现.IE浏览器默认使用的必应搜索引擎(cn.bing.com) 而360安全浏览器默认使用的好搜搜索引擎.(haosou.com),对于两种浏览器,我们都可以 ...

  3. 【CF736D】Permutations 线性代数+高斯消元

    [CF736D]Permutations 题意:有一个未知长度为n的排列和m个条件,第i个条件$(a_i,b_i)$表示第$a_i$个位置上的数可以为$b_i$.保证最终合法的排列的个数是奇数.现在有 ...

  4. 修改nose_html_reporting,解决输出带中文时,不能生成html文件

    在使用nose_html_reporting时,如果测试输出中带有中文,那么html输出会失败,提示如下: 提示'ascii'编码码失败 这是因为在string.IO中取回来的数据与当前脚本中声明的编 ...

  5. Thinkphp框架下设置session的过期时间

    打开项目中的配置文件,添加session的过期配置,如下: 'SESSION_OPTIONS' => array( 'name' => 'BJYSESSION', //设置session名 ...

  6. Zabbix监控Nginx状态信息

    首先要检查Nginx是否安装了 http_stub_status_module 模块,通过下面的命令可以看到编译参数.yum安装的默认会带有这个模块. [root@kafka60 ~]# /data/ ...

  7. FZU 2092 收集水晶(记忆化搜索)

    Problem 2092 收集水晶 Accept: 101 Submit: 439 Time Limit: 5000 mSec Memory Limit : 32768 KB Problem Desc ...

  8. Codeforces 278B Books

    好久没有写二分了 题意:有n本书 每本书有一个阅读时间ai 要在t时间内读最多的书 读书的顺序是连续的,如果无法读完一本书就不能开始 最开始觉得会是个dp,但是动规方程写不出来.想想会不会是二分呢,也 ...

  9. 2.4scope

    name_scope variable_scope scope (name_scope/variable_scope) from __future__ import print_function im ...

  10. python面向对象高级:@property

    @property 把方法『变成』了属性,广泛应用在类的定义中,可以让调用者写出简短的代码,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性. 最大的作用就是既能检查参数,又可以用类 ...