一.  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()的更多相关文章

  1. Python中xml、字典、json、类四种数据的转换

    最近学python,觉得python很强很大很强大,写一个学习随笔,当作留念注:xml.字典.json.类四种数据的转换,从左到右依次转换,即xml要转换为类时,先将xml转换为字典,再将字典转换为j ...

  2. python 字典不区分大小写工具类

    # -*- coding: utf-8 -*- # @Time : 2018/12/20 4:28 PM # @Author : cxa # @File : DictHelper.py # @Soft ...

  3. 字典,字符串,元组,字典,集合set,类的初步认识,深浅拷贝

    Python之路[第二篇]:Python基础(一)   入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 1==1: name = 'Jaso ...

  4. 问题6:如何让字典保持有序(使用collections的OrderedDict方法)

    from collections imort OrderedDict d = OrderedDict() d['aa'] = (1, 30) d['bb'] = (2, 31) d['cc'] = ( ...

  5. 【java工具类】生成Zip压缩包

    多文件生成压缩包,返回压缩包生成位置的路径. FileUtil.java /** * 文件打压缩包 * @param files * @param Name * @return * @throws E ...

  6. python-Day3-set 集合-counter计数器-默认字典(defaultdict) -可命名元组(namedtuple)-有序字典(orderedDict)-双向队列(deque)--Queue单项队列--深浅拷贝---函数参数

    上节内容回顾:C语言为什么比起他语言块,因为C 会把代码变异成机器码Pyhton 的 .pyc文件是什么python 把.py文件编译成的.pyc文件是Python的字节码, 字符串本质是 字符数组, ...

  7. python之OrderedDict类

    # OrderedDict类使用举例 # OrderedDict类的使用与字典相似,不同的是OrderedDict类会记录键值对的添加顺序 from collections import Ordere ...

  8. python有序字典OrderedDict()

    转python创建有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections " ...

  9. python创建有序字典OrderedDict()

    python 有序字典OrderedDict # -*- coding:utf-8 -*- """ python有序字典 需导入模块collections "& ...

随机推荐

  1. 把CString转化为char*

    转:http://blog.sina.com.cn/s/blog_58e19ae7010003jt.html 正确方法:CString m_Head:char *codefile;codefile=( ...

  2. Python_04-字符串操作

    1      字符串的运算 字符串是程序中经常使用的元素,字符串的运算也很多,包括连接两个字符串,取一个字符串中的一部分,称为取子字符串,大小写转换,字符串与数值的转换等. 1.1   字符串的连接 ...

  3. 使用SQL查询所有数据库名和表名

    使用SQL查询所有数据库名和表名 MySQL中查询所有数据库名和表名 查询所有数据库 show databases; 1 1 查询指定数据库中所有表名 select table_name from i ...

  4. YUI前端优化原则-cookie与图像

    四.图片.Coockie与移动应用篇 除此之外,图片和Coockie也是我们网站中几乎不可缺少组成部分,此外随着移动设备的流行,对于移动应用的优化也十分重要.这主要包括:Coockie: 减小Cook ...

  5. 20172325 2018-2019-2 《Java程序设计》第三周学习总结

    20172325 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 一.什么是队列? 队列是一种线性集合,其元素从一端加入,从另一端删除: 队列的元素按照FIF ...

  6. Spring boot——logback.xml 配置详解(三)<appender>

    阅读目录 1 appender 2  encoder 文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 回到顶部 1 appender < ...

  7. c语言技术课第一次作业

    读邹欣老师博客关于师生关系有感 1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 答:    在邹欣老师博客中我看到邹欣老师列举了很多师生关系的类型,把这种关系比喻成很 ...

  8. JavaScript 对象属性作实参以及实参对象的callee属性

    参考自<<JavaScript权威指南 第6版>> /* * 将对象属性用作实参, 从而不必记住参数的顺序. */ function arraycopy(from,from_s ...

  9. Javascript 知识遗漏点梳理。

    先说一下我之前学习Javascript的学习经历,然后就是最近几天学到以前没有注意的知识遗漏点. 1.之前的学习经历和方法: 最开始是看了Javascript DOM编程与艺术这本书,把慕课网上的&l ...

  10. thinkphp ajax分页加载更多最简单的实现方法

    <div class="li_list"> <volist name="list" id="vo"> <div ...