python中dict()的高级用法实现


Posted in Python onNovember 13, 2019

collections中defaultdict的用法

一、字典的键映射多个值

将下面的列表转换成字典

python中dict()的高级用法实现

一个字典就是一个键对应一个单值得映射,而上面的列表中有相同的键,如果你想要一个键映射多个值,那么就需要将这多个值放到另外的序列中,比如list或者set里面,像下面这样:

python中dict()的高级用法实现

你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。

defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值。

python中dict()的高级用法实现

当然这个默认的容器不一定是 list, 也可以是集合 set。 根据自己的需求选择使用 list 还是 set 。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就是用集合。

二、统计字典中某个值出现的次数

现在有一个列表,列表中有很多字典,需要统计字典中相同的键对应的值得和

python中dict()的高级用法实现

利用defaultdict 设置默认值的方法 defaultdict(int) ,代码如下:

python中dict()的高级用法实现

collections 创建有序字典

字典dict是无序的,如果我们想要有序的字典,可以使用 OrderedDict,示例如下:

python中dict()的高级用法实现

OrderedDict 内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元素插入进来的时候,它会被放到链表的尾部,对于一个已经存在的键的重复赋值不会改变键的顺序。

需要注意的是,一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表,所以如果你需要构建一个需要大量 OrderedDict 实例的数据结构的时候(比如读取100,000行CSV数据到一个 OrderedDict 列表中),那么你就得仔细权衡一下是否使用 OrderedDIict 带来的好处要大过于额外内存消耗的影响。

改变key-value的顺序

OrderedDict 是有序的字典,同时也能改变其顺序,比如我们想要改变有序的 OrderedDict 对象的key-value 顺序,可以使用 move_to_end(key), 还是以上面创建的有序字典为例子

python中dict()的高级用法实现

可以看到之前排在第一位的 bar 被移到最后一位了,move_to_end还接收一个关键字参数 last,last默认为True,当last=False时,表示将该键移动到最前面。

删除key_value

如果我们要删除有序字典中的 key_value,可以使用 popitem 方法,popitem(last=True)按照先进后出的顺序删除 dict 中的key_value,popitem(last=False) 按照先进先出的顺序删除dict中的 key_value

python中dict()的高级用法实现

字典排序

利用python 内置函数 sorted 对字典的键或者值进行排序,首先来了解下sorted 函数

sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable -- 可迭代对象
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

按照key进行排序

理解了 sorted 函数就好办了,代码如下:

python中dict()的高级用法实现

按照value进行排序

代码如下:

python中dict()的高级用法实现

注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。

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

假设你有一个字典列表,如下:

python中dict()的高级用法实现

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

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

python中dict()的高级用法实现

itemgetter() 函数也支持多个 keys,比如下面的代码:

python中dict()的高级用法实现

好了,上面就是字典的一些高级用法,先到这里吧,我们下次继续…

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深入Python解释器理解Python中的字节码
Apr 01 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
pow在python中的含义及用法
Jul 11 Python
python BlockingScheduler定时任务及其他方式的实现
Sep 19 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
Python实现队列的方法示例小结【数组,链表】
Feb 22 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
Apr 30 Python
python多线程实现同时执行两个while循环的操作
May 02 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
Python+tkinter实现高清图片保存
Mar 13 Python
python实现的多任务版udp聊天器功能案例
Nov 13 #Python
利用python实现PSO算法优化二元函数
Nov 13 #Python
使用python制作一个解压缩软件
Nov 13 #Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 #Python
基于python实现把图片转换成素描
Nov 13 #Python
Django连接数据库并实现读写分离过程解析
Nov 13 #Python
Pandas操作CSV文件的读写实现方法
Nov 13 #Python
You might like
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
基于jQuery实现一个marquee无缝滚动的插件
2017/03/09 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python获取当前计算机cpu数量的方法
2015/04/18 Python
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
Python学习小技巧总结
2018/06/10 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python使用配置文件过程详解
2019/12/28 Python
Python如何解除一个装饰器
2020/08/07 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
导游词之桂林
2019/08/20 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python