关于字典的几个类--defaultdict,OrderedDict, zip()
一. 1个键对应多个值
比如:d = {'a' : [1, 2, 3], 'b' : [4, 5]},可以使用 collections 模块中的 defaultdict 来构造这样的字典
from collections import defaultdict #对应的多个值是列表形式
d = defaultdict(list)
d['a'].append()
d['a'].append()
d['b'].append() #对应的多个值是集合形式
d = defaultdict(set)
d['a'].add()
d['a'].add()
d['b'].add()
注意:
1. 选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)
2. defaultdict的用法和普通字典的用法是一样的,比如多值为集合形式时 d['a']的输出为{1,2}
二. 字典元素排序,使用OrderedDict
from collections import OrderedDict d = OrderedDict()
d['foo'] =
d['bar'] =
d['spam'] =
d['grok'] = for key in d:
print(key, d[key]) # Outputs "foo 1", "bar 2", "spam 3", "grok 4"
注意:一个 OrderedDict 的大小是一个普通字典的两倍,因为它内部维护着另外一个链表。所以如果你要构建一个需要大量 OrderedDict 实例的数据结构的时候 (比如读取 100,000 行 CSV 数据到一个 OrderedDict 列表中去),那么你就得仔细权衡一下是否使用 OrderedDict 带来的好处要大过额外内存消耗的影响
三. 字典中执行计算操作,使用zip()反转键和值
1. 正常情况下,在字典上的运算只会作用于键,对值是无效的,如下
>>> prices = { 'AAA' : , 'ZZZ': , 'BBB': }
>>> min(prices)
'AAA'
>>> max(prices)
'ZZZ'
2. 如果想按数值进行排序或者计算,并且结果显示整个键值对。可以用zip()函数,把键值对反转
>>> fanzhuan = zip(prices.values(), prices.keys())
>>> min_price = min(fanzhuan)
>>> print(min_price)
(, 'ZZZ')
注意:zip() 函数创建的是一个只能访问一次的迭代器,每次使用都需要重新调用此函数。
3. 使用zip()函数时,如果多个实体拥有相同的值的时候,键会决定返回结果
>>> prices = { 'AAA' : 45.23, 'ZZZ': 45.23 }
>>> min(zip(prices.values(), prices.keys()))
(45.23, 'AAA')
>>> max(zip(prices.values(), prices.keys()))
(45.23, 'ZZZ')
四. 查找两个字典中的相同点,比如相同的键名或者值
例如:a = {'x' : 1, 'y' : 2, 'z' : 3} b = {'w' : 10, 'x' : 11, 'y' : 2},现在查找这两个字典中的相同处,可以在两字典的 keys() 或者 items() 方法返回结果上执行集合操作
# 两个字典公有的键
>>> a.keys() & b.keys()
{'y', 'x'} #只在a字典中存在的键
>>> a.keys() - b.keys()
{'z'} #两个字典中共有的键值对
>>> a.items() & b.items()
{('y', )}
这些操作也可以用于修改或者过滤字典元素,比如下面使用列表推导式
>>> c = {key:a[key] for key in a.keys() - {'z'}}
>>> c
{'y': , 'x': }
关于字典的几个类--defaultdict,OrderedDict, zip()的更多相关文章
- Python中xml、字典、json、类四种数据的转换
最近学python,觉得python很强很大很强大,写一个学习随笔,当作留念注:xml.字典.json.类四种数据的转换,从左到右依次转换,即xml要转换为类时,先将xml转换为字典,再将字典转换为j ...
- python 字典不区分大小写工具类
# -*- coding: utf-8 -*- # @Time : 2018/12/20 4:28 PM # @Author : cxa # @File : DictHelper.py # @Soft ...
- 字典,字符串,元组,字典,集合set,类的初步认识,深浅拷贝
Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'Jaso ...
- 问题6:如何让字典保持有序(使用collections的OrderedDict方法)
from collections imort OrderedDict d = OrderedDict() d['aa'] = (1, 30) d['bb'] = (2, 31) d['cc'] = ( ...
- 【java工具类】生成Zip压缩包
多文件生成压缩包,返回压缩包生成位置的路径. FileUtil.java /** * 文件打压缩包 * @param files * @param Name * @return * @throws E ...
- python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数
上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...
- python之OrderedDict类
# OrderedDict类使用举例 # OrderedDict类的使用与字典相似,不同的是OrderedDict类会记录键值对的添加顺序 from collections import Ordere ...
- python有序字典OrderedDict()
转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...
- python创建有序字典OrderedDict()
python 有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections "& ...
随机推荐
- 分区恢复和NTFS文件恢复试验
一.实验室名称:主楼实验室A2-412 二.实验项目名称:分区恢复和NTFS文件恢复试验 三.实验学时:6学时 四.实验原理: 借助fdisk.diskgen软件对磁 ...
- 为什么数组没有实现Iterable接口,但可以使用foreach语句遍历
在Java中,对于数组为什么能够使用foreach语句一直感觉很困惑. 对于能够使用foreach语句进行遍历的对象,只有两种情况,其中一种是遍历对象必须实现Iterable接口,实现ierator( ...
- ios 7.1企业证书无线安装
ios升级到7.1时,企业证书http服务器发布无线安装不能使用,需要使用https服务器. 测试了几种方式 1.测试时自签名https证书测试无效,提示不能连接到服务器 2.使用dropbox共享连 ...
- python socket编程入门(编写server实例)-乾颐堂
python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...
- Python爬虫进阶四之PySpider的用法
审时度势 PySpider 是一个我个人认为非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇内容通过跟我做一个好玩的 ...
- kubernetes 1.6 RBAC访问控制
一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...
- POJ2195 Going Home (最小费最大流||二分图最大权匹配) 2017-02-12 12:14 131人阅读 评论(0) 收藏
Going Home Description On a grid map there are n little men and n houses. In each unit time, every l ...
- nginx docker 方式启动后日志切分的正确姿势
Linux系统的日志文件的切分主要是由logrotate来完成的,以centos7为例配置通常在/etc/logrotate.d 目录下 添加 nginx 文件 cat nginx /var/log/ ...
- SQL Server 2014与TFS 2013的错误(TF53001:管理员已取消数据库操作)
服务器环境: - TFS 2013 with Update 2 - SQL Server 2014(两个节点数据库服务器配置了AlwaysOn高可用性) - Windows Server 2012 R ...
- C# superGridControl 样式设置、加载数据、获取数据
样式设置 superGridControl1.PrimaryGrid.SelectionGranularity = SelectionGranularity.Cell; //设置选中样式 单元格.整列 ...