一.  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. LevelDB 的缺憾

    [LevelDB 的缺憾] 1.Snapshots 只能通过 DB::GetSnapshot() 创建,意即只能创建当下的 Snapshot. 2.

  2. 14.Longest Common Prefix (String)

    Write a function to find the longest common prefix string amongst an array of strings. class Solutio ...

  3. ArcEngine调用FeatureToLine工具传参问题

    FeatureToLine工具的in_features参数不能为内存图层,否则会报内存错误,正确的写法如下: FeatureToLine ftrToLine = new FeatureToLine() ...

  4. for 续4

    ---------siwuxie095             (四)tokens=x,y,m-n 显示指定的列     tokens=x 只显示第 x 列 tokens=x,y,z 只显示第 x,y ...

  5. socket的protocal参数

    Documentation for socket() on Linux is split between various manpages including ip(7) that specifies ...

  6. code1105 过河

    dp方程很简单: f[i] = min{ f[i-j] } + stone[i] 但是数据10^9太大了,超时超空间,这样只能过30% 来自:http://blog.csdn.net/w1996070 ...

  7. 从cookie中取值$.cookie()

    从cookie中取值: var userid = $.cookie("remoteuserid");例子: function delUser() {     var table = ...

  8. git和码云的使用

    什么是码云 快速入门 Git入门 码云是开源中国社区2013年推出的基于 Git 的完全免费的代码托管服务,这个服务是基于 Gitlab 开源软件所开发的,我们在 Gitlab 的基础上做了大量的改进 ...

  9. 我们常说的CDN到底是什么?

    程序员每天提及的无数词当中,有一个是「CDN」,Ta的中文名是「内容分发网络」,读中文是令人蒙逼的,英文名是Content Delivery Network. CDN有啥用呢?它主要用来解决什么问题呢 ...

  10. eclipse两种注释的快捷键

    方法一:使用Ctrl+/快捷键   1 第1步:在Eclipse中拖动鼠标,选中需要注释的代码,通常为连续多行代码. 2 第2步:按住Ctrl+/快捷键,如图所示. 3 第3步:会发现所选代码被“// ...