python3有多少个关键字排序_python3 数据结构和算法-- 通过某个关键字排序一个字典列表...

通过某个关键字排序一个字典列表

问题

你有一个字典列表,你想根据某个或某几个字典字段来排序这个列表。

解决方案

通过使用 operator 模块的 itemgetter 函数,可以非常容易的排序这样的数据结构。 假设你从数据库中检索出来网站会员信息列表,并且以下列的数据结构返回:

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}

]

根据任意的字典字段来排序输入结果行是很容易实现的,代码示例:

from operator import itemgetter

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

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

print(rows_by_fname)

print(rows_by_uid)

代码的输出如下:

[{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},

{'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},

{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},

{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'}]

[{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},

{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},

{'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},

{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'}]

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 对象的。

operator.itemgetter() 函数有一个被 rows 中的记录用来查找值的索引参数。可以是一个字典键名称, 一个整形值或者任何能够传入一个对象的 __getitem__() 方法的值。 如果你传入多个索引参数给 itemgetter() ,它生成的 callable 对象会返回一个包含所有元素值的元组, 并且 sorted() 函数会根据这个元组中元素顺序去排序。 但你想要同时在几个字段上面进行排序(比如通过姓和名来排序,也就是例子中的那样)的时候这种方法是很有用的。

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() 方式。

最后,不要忘了这节中展示的技术也同样适用于 min() 和 max() 等函数。比如:

>>> min(rows, key=itemgetter('uid'))

{'fname': 'John', 'lname': 'Cleese', 'uid': 1001}

>>> max(rows, key=itemgetter('uid'))

{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}

>>>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430954.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php页面怎么去登录,php中登录后跳转回原来要访问的页面实例

在很多网站用户先访问一个要登录的页面,但当时没有登录后来登录了,等待用户登录成功之后肯定希望返回到上次访问的页面,下面我就来给大家介绍登录后跳转回原来要访问的页面实例最简单的办法就是直接使用php $_SERVER[HTTP_REFERER]如果我在A.…

三目运算

total>100?total*0.8:total;//true执行冒号前面的;false执行冒号后面的 等价于 if(total>100){ totaltotal*0.8; }else{ totaltotal; }转载于:https://www.cnblogs.com/barbie7/p/5129566.html

二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了

创建二叉树、遍历二叉树、二叉树的最近公共祖先任何疑问、意见、建议请公众号留言或联系qq474356284先序、后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式:创建二叉树时的输入:如序列:{1 2 -1 -1 3 -1 -1}表示1结点有2,…

tp5 php正则邮箱,TP5验证器使用实例

TP5验证器建立模块\validate\验证器文件名例如我们定义了一个验证USER的验证器类<?php namespace app\admin\validate;use think\Validate;class Admin extends Validate{protected $rule [username > require|min:3|max:16|unique:admin,password > require|min:6|…

zookeeper 密码_阿里资深JAVA架构带你深度剖析dubbo和zookeeper关系

为什么要用dubbo&#xff1f;当网站规模达到了一定的量级的时候&#xff0c;普通的MVC框架已经不能满足我们的需求&#xff0c;于是分布式的服务框架和流动式的架构就凸显出来了。单一应用架构当网站流量很小时&#xff0c;只需一个应用&#xff0c;将所有功能都部署在一起&…

python pandas csv 追加 空行,python – Pandas:read_csv在空行后忽略行

有一个奇怪的.csv文件,如&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,val32,val33很好,但在这些线之后,总会有一个空行,后面跟着很多无用的线.整个事情是一致的&#xff1a;header1,header2,header3val11,val12,val13val21,val22,val23val31,…

nw.js FrameLess Window下的窗口拖拽与窗口大小控制

nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候&#xff0c;我们觉得系统的Frame框很难看&#xff0c;于是想自定义。 自定义Frame的第一步是在package.config文件中将frame选项设置为false。 { "name": "1", "main": "index.…

python控制语句实验报告,python流程控制语句案例练习

最近玩python&#xff0c;为了更好的学习其中的流程控制语句&#xff0c;本身写了一个查询员工信息和更新信息的脚本&#xff0c;此脚本仅供练习使用。大拿可绕行&#xff01;python#!/usr/bin/env pythonimport sysimport osos.system(clear)mess \033[;35m ID :%s\033[0m\03…

linux 文件重命名_如何在 Linux 上重命名一组文件 | Linux 中国

要用单个命令重命名一组文件&#xff0c;请使用 rename 命令。它需要使用正则表达式&#xff0c;并且可以在开始前告诉你会有什么更改。-- Sandra Henry-stocker几十年来&#xff0c;Linux 用户一直使用 mv 命令重命名文件。它很简单&#xff0c;并且能做到你要做的。但有时你需…

Spring 构造注入 传參数

1. 提供相应的构造方法 //构造器注入 public class Bean6 {private String name;private Integer age;// 服务于构造器注入使用public Bean6(String name, Integer age) {super();this.name name;this.age age;}public void show() {System.out.println("bean6:&…

php正则表达式函数案例,PHP正则表达式函数preg_replace用法实例分析

PHP正则表达式函数preg_replace用法。&#xff0c;具体如下&#xff1a;preg_replace 执行一个正则表达式的搜索和替换语法&#xff1a;preg_replace (pattern ,replacement ,subject,limit,count )参数描述pattern正则表达式(字符串或字符串数组)replacement用于替换的字符串或…

python tk protocol_Python Modbus_tk在树莓派上实现rtu master

利用 python modbus工具实现modbus从站的数据采集&#xff0c;很方便简单。Python Modbus 协议工具目前有下面三种&#xff1a;modbus_tk&#xff1a;完整modbus协议栈的实现&#xff0c;支持modbus tcp/rtu&#xff5b;1.提供slave模拟器&#xff0c;即模拟modbus server:502)…

根据另外一个表来更新,增加字段

update table1 set field1table2.field1,field2table2.field2from table2where table1.idtable2.id添加字段&#xff1a;alter table 表名 add 字段名 类型删除字段&#xff1a;alter table 表名 drop column 字段名转载于:https://www.cnblogs.com/yzwdli/p/5147512.html

html注册跳转php错误500,页面跳转后提示HTTP 异常 500(Internal Server Error):服务器尝试执行请求时遇到了意外情况...

页面跳转后提示HTTP 错误 500(Internal Server Error)&#xff1a;服务器尝试执行请求时遇到了意外情况。index.php跳转到chkadmin.php提示(服务器错误网站在检索 http://localhost/shop/admin/chkadmin.php 时遇到错误。 该网站可能关闭进行维护或配置不正确。以下是一些建议&…

python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import requestsfrom multiprocessing import Poolimport reimport jsonfrom requests.exceptions import ConnectionErrordef get_to_html(url):try:headers {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0;…

oracle插入性能优化,Oracle-insert性能优化

看见朋友导入数据&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速的方法&#xff0c;整理下&#xff01; 向表中插入数据有很多办法,但是方法不同&#xff0c;性能差别很看见朋友导入数据&#xff0c;&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速…

python中setup什么意思_一个关于python3中setup.py小概念

一个关于setup.py小概念关于python setup.py bdistpython setup.py sdist两者的区别sdist 指的是source dist 即源码发布&#xff0c;带setup.pybdist 指的是built (binary) dist 即编译过(二进制)发布 不带setup.py查看setup.py各种编译命令参数python setup.py --help-c…

dba_segments和dba_tables的不同

create table tset as select * from dba_objects; select count(*) from tset; select table_name,blocks,empty_blocks from dba_tables where table_name’TSET’; select segment_name,bytes,blocks,extents from dba_segments where segment_name’TSET’; 问题来了&#…

oracle数sqlplus,sqlplus查询oracle数据库数据容量

登录sqlplus&#xff1a;cmd命令行登录&#xff1a;sqlplus orcl/orcl as sysdba查询表空间使用率select b.file_id  文件ID,b.tablespace_name  表空间,b.file_name     物理文件名,b.bytes       总字节数,(b.bytes-sum(nvl(a.bytes,0)))   已使用,sum(nv…

微博air客户端_打磨近十年,接近「完美」的 macOS 第三方微博客户端:Maipo

2020年11月13日&#xff0c;macOS Big Sur正式推送当天&#xff0c;Maipo for 微博也迎来了4.0.0大版本更新。从Weibo for Mac&#xff08;2011年&#xff09;、WeiboX&#xff08;2014年&#xff09;到Maipo&#xff08;2017年&#xff09;&#xff0c;跨度近十年&#xff0c;…