一、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字典&顺序字典的更多相关文章

  1. 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用

    一.collections.deque队列 deque(maxlen=N)构造函数会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉. 如果你不设置最大队列大小, ...

  2. 『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 ...

  3. 『Python CoolBook』数据结构和算法_字典比较&字典和集合

    一.字典元素排序 dict.keys(),dict.values(),dict.items() 结合max.min.sorted.zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambd ...

  4. 【python cookbook】【数据结构与算法】13.通过公共键对字典列表排序

    问题:想根据一个或多个字典中的值来对列表排序 解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的. # Sort a list of a dicts on ...

  5. 『Python CoolBook』Cython

    github地址 使用Cython导入库的话,需要一下几个文件: .c:C函数源码 .h:C函数头 .pxd:Cython函数头 .pyx:包装函数 setup.py:python 本节示例.c和.h ...

  6. 『Python基础-10』字典

    # 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...

  7. 『Python基础-1 』 编程语言Python的基础背景知识

    #『Python基础-1 』 编程语言Python的基础背景知识 目录: 1.编程语言 1.1 什么是编程语言 1.2 编程语言的种类 1.3 常见的编程语言 1.4 编译型语言和解释型语言的对比 2 ...

  8. 『Python基础-12』各种推导式(列表推导式、字典推导式、集合推导式)

    # 『Python基础-12』各种推导式(列表推导式.字典推导式.集合推导式) 推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的 ...

  9. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

随机推荐

  1. 实现mybash

    任务内容 1.使用fork,exec,wait实现mybash 查找资料: fork函数 通过fork()系统调用我们可以创建一个和当前进程印象一样的新进程.我们通常将新进程称为子进程,而当前进程称为 ...

  2. loj2876 水壶 [JOISC 2014 Day2] kruscal重构树

    正解:kruscal重构树+bfs 解题报告: 我永远喜欢loj! 感觉这题和这题挺像的,,,预处理和解题方法都是,,,所以大概整体二分能过去? 但因为做这题主要是入门一下kruscal重构树,,,所 ...

  3. php 与mysql 数据库

    新手上路,php刚学,数据库刚学,花了两天终于读到数据库的数据了. 一路上的坎坷我在这里吐槽吐槽: <?php $mysql_server_name='localhost'; //改成自己的my ...

  4. Servlet 随记:

    API 1)init(ServletConfig config) 何时执行:servlet对象创建的时候执行 ServletConfig : 代表的是该servlet对象的配置信息 2)service ...

  5. java框架之MyBatis(1)-入门&动态代理开发

    前言 学MyBatis的原因 1.目前最主流的持久层框架为 Hibernate 与 MyBatis,而且国内公司目前使用 Mybatis 的要比 Hibernate 要多. 2.Hibernate 学 ...

  6. eclipse打包jar包

    项目右键  选择Export 选择java文件夹 选择 JAR file选择包,类,选择导出路径然后 Finish

  7. 当业务逻辑没错,直接mapper里面出错时

    仔细检查,发现sql语句写的也没问题,但就是出错 slide_show_img_url = #{slideShowImgUrl,jdbcType=VARCHAR}, where goods_slide ...

  8. JAVA 重写equals和重写hashCode

    面试官可能会问你:“你重写过 hashcode 和 equals 么,为什么重写equals时必须重写hashCode方法?” 首先你需要了解: hashCode()的作用是获取哈希码(散列码) 它实 ...

  9. fiddler学习总结--手机端(APP/微信小程序)抓包

    步骤一.手机和电脑要在同一个局域网中 步骤二.完成fiddler的基本配置,与web端抓包一样: TOOLS-->options-->connections-->1.设置端口:2.勾 ...

  10. mecacheq的配置

    在处理业务逻辑时有可能遇到高并发问题,例如商城秒杀.微博评论等.如果不做任何措施可能在高瞬间造成服务器瘫痪,如何解决这个问题呢?队列是个不错的选择.队列(Queue)又称先进先出(First In F ...