『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典
一、collections.defaultdict:多值映射字典
defaultdict省去了初始化容器的过程,会默认value对象为指定类型的容器
指定list时可以使用.append,
from collections import defaultdict d = defaultdict(list) d['a'].append(1)
d
defaultdict(list, {'a': [1]})
指定set时可以使用.add,
d = defaultdict(set) d['a'].add(1)
d['a'].add(1)
d
defaultdict(set, {'a': {1}})
原字典可以使用.setdefault方法指定value为容器,但是不太推荐,如下,
d = {}
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(3)
d.setdefault('c', {1,2,3}) #默认的dict对象没有add方法,非使用append也不行
# 由于默认的方法中每次添加新的元素都要创建新的空对象[],所以不推荐
d
{'a': [1, 2], 'b': [3], 'c': {1, 2, 3}}
顺便,字典的内容是key值,
'a' in d # 字典in的是key
True
二、collections.OrderedDict:含序字典
OrderedDict内部维护着一个双向链表用于记录键值插入的顺序,更新键值不会影响原有顺序,插入键值会插入在末尾,所以其内存消耗为普通字典的两倍,
from collections import OrderedDict d = OrderedDict()
d['a'] = 1
d['c'] = 3
d['b'] = 2
print(d, d.items())
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
odict_items([('a', 1), ('c', 3), ('b', 2)])
含序字典实际上常和json连用,用于输出信息,
import json
# 对字典进行编码,使用OrderdDict可以控制字段顺序 json.dumps(d)
'{"a": 1, "c": 3, "b": 2}'
『Python CoolBook:Collections』数据结构和算法_容器型value字典&顺序字典的更多相关文章
- 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用
一.collections.deque队列 deque(maxlen=N)构造函数会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉. 如果你不设置最大队列大小, ...
- 『Python CoolBook』数据结构和算法_多变量赋值&“*”的两种用法
多变量赋值 a = [1,2,(3,4)] b,c,d = a print(b,c,d) b,c,(d,e) = a print(b,c,d,e) 1 2 (3, 4) 1 2 3 4 a = &qu ...
- 『Python CoolBook』数据结构和算法_字典比较&字典和集合
一.字典元素排序 dict.keys(),dict.values(),dict.items() 结合max.min.sorted.zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambd ...
- 【python cookbook】【数据结构与算法】13.通过公共键对字典列表排序
问题:想根据一个或多个字典中的值来对列表排序 解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的. # Sort a list of a dicts on ...
- 『Python CoolBook』Cython
github地址 使用Cython导入库的话,需要一下几个文件: .c:C函数源码 .h:C函数头 .pxd:Cython函数头 .pyx:包装函数 setup.py:python 本节示例.c和.h ...
- 『Python基础-10』字典
# 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...
- 『Python基础-1 』 编程语言Python的基础背景知识
#『Python基础-1 』 编程语言Python的基础背景知识 目录: 1.编程语言 1.1 什么是编程语言 1.2 编程语言的种类 1.3 常见的编程语言 1.4 编译型语言和解释型语言的对比 2 ...
- 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)
# 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...
- 『Python基础-11』集合 (set)
# 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...
随机推荐
- C++中vector使用详细说明 (转)
转自:http://blog.chinaunix.net/uid-26000296-id-3785610.html http://www.cnblogs.com/mr-wid/archive/2013 ...
- ext 的loadmask 与ajax的同步请求水火不容
由于ajax 的同步请求会有一段请求时间.有的短.有的长,对于短的我们还是能接受的,不过长的话就必须处理一下了, 就比如处于ext 4.2.0的框架下,需要一个遮掩的样式,框架是有自带的,loadma ...
- mysql 字段唯一性问题
ALTER TABLE tb ADD unique (name);
- QCon2019全球软件开发大会广州站即将来袭
QCon广州2019|全球软件开发大会 会议时间:2019-05-25 08:00至 2019-05-28 18:00结束 会议地点: 广州 广州万富希尔顿酒店 中国广州市白云区云城东路515-5 ...
- pytorch预训练模型的下载地址以及解决下载速度慢的方法
https://github.com/pytorch/vision/tree/master/torchvision/models 几乎所有的常用预训练模型都在这里面 总结下各种模型的下载地址: 1 R ...
- deeplabv3+ demo测试图像分割
#!--*-- coding:utf-8 --*-- # Deeplab Demo import os import tarfile from matplotlib import gridspec i ...
- js事件冒泡和事件捕捉
结论:他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件冒泡是自下而上的去触发事件.绑定事件方法的第三个参数,就是控制事件触发 ...
- Hibernate映射数据库中longtext类型属性时报错No Dialect mapping for JDBC type: -1的解决方案
出现错误的原因是:hibernate中对于数据库的longtext数据类型不支持. 解决方案: 1.写个类集成方言,然后自己实现对longtext的支持 import java.sql.Types; ...
- C++重载操作符自增自减
#include <iostream> using namespace std; class Test { friend ostream& operator<<(ost ...
- vue常见前端UI库
vue常见前端UI库 VUE资源汇总:https://github.com/RuMengkai/awesome-vue VUX 项目主页:https://vux.li/#/ github地址:http ...