《Python3程序开发指南》

映射:键-值数据项的组合

Python3支持两种无序的映射类型:内置的dict类型、标准库中的collections.defaultdict类型。

Python3.1中引入了有序的映射类型:collections.OrderedDict,与内置dict有相同的方法和属性,但在存储数据时以插入顺序进行。

键:可哈希运算的对象的对象引用;值:任意类型对象的对象引用

  1. 使用字典字面值创建
  2. >>> d1=dict({"id":1948,"name":"Washer","size":3})
  3. >>> d1
  4. {'id': 1948, 'name': 'Washer', 'size': 3}
  5.  
  6. 使用关键字参数创建
  7. >>> d2=dict(id=1948,name="Washer",size=3)
  8.  
  9. 从序列中创建,d4中的zip()函数返回一个元组列表
  10. >>> d3=dict([("id",1948),("name","Washer"),("size",3)])
  11. >>> d4=dict(zip(("id","name","dize"),(1948,"Washer",3)))
  12.  
  13. 从字典字面值创建
  14. >>> d5={"id":1948,"name":"Washer","size":3}

  迭代:

  1. >>> for item in d1.items():
  2. print item[0],item[1]
  3.  
  4. id 1948
  5. name Washer
  6. size 3
  7.  
  8. 第二种方法
  9. >>> for key,value in d1.items():
  10. print key,value
  11.  
  12. id 1948
  13. name Washer
  14. size 3

  根据字典的值进行迭代

  1. >>> for key in d1.keys():
  2. print key
  3.  
  4. >>> for key in d1:
  5. print key
  6.  
  7. >>> for value in d1.values():
  8. print value

  字典方法

d.clear()  
d.copy() 浅拷贝 
d.fromkeys(s,v) 返回一个dict,该字典的键为序列s中的项,值为None或v中的值(若给定了参数v) 
d.get(k) 返回 键k对应的value,如果k不存在,返回None
d.get(k,v) 返回 键k对应的value,如果k不存在,返回v
d.items() 返回d中的(key,value)对 
d.keys()  
d.pop(k) 返回k对应的value,并删除键为k的项,若没有产生keyError异常 
d.pop(k,v) 返回k对应的value,并删除键为k的项,若没有则返回v
d.popitem() 返回并删除dict中一个任意的(key,value),如果d为空产生KeyError异常 
d.setdefault(k,v)

同d.get()

不同处:如果k没有在d 中,插入一个键为k,值为None或v(若给定了参数v)

d.update(a)

a中未包含在d中的(key,value)添加到d中

同时在a和d中的键,用a中的value替换d中的value

a:可以是字典、可以使(key,value)对的一个iterable,或关键字参数

d.values() 返回d中所有值 

 字典内涵

两种语法格式:

[keyexpression:valueexpression for key, value in iterable]

[keyexpression:valueexpression for key, value in iterable if condition]

实例一:如果使用字典内涵创建字典,键为当前目录中文件的文件名,值为以字节计数的文件大小

  1. os.listdir()返回传递给函数的路径中包含的文件与目录列表但列表中不会包含"."".."
  2. os.path.getsize()函数返回给定文件的大小(以字节计数)
  3.  
  4. >>> file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")}
  5.  
  6. >>> file_sizes = {name:os.path.getseize(name) for name in os.listdir(".")
  7. if os.path.isfile(name)}

  

创建反转的目录,比如给定字典d,生成一个新字典,新字典的键是d的值,值是d的键

  1. >>> inverted_d = {v:k for k,v in d.items()}

 

默认字典----collections.defaultdict

与普通字典的区别:默认字典可以对遗失的键进行处理。其他方面与普通字典一样

例如,对于某个字典d,其中不包含键为m的项,x=d[m]会产生异常。若d为默认字典,那么如果键为m的项不在字典中,就会创建一个新项,其键为m,值默认,并返回新建的项。

创建默认字典:创建默认字典时,可以传入一个工厂函数,调用工厂函数时,将返回某种特定类型的对象。对默认字典调用工厂函数时,将为遗失的键创建默认值。

Python所有的内置类型都可以用作工厂函数,比如,数据类型str可以作为函数str()进行调用,将返回一个空字符串对象

  1. >>> import collections
  2. >>> words = collections.defaultdict(int)
  3. >>> x = words["xyz"]
  4. >>> x
  5. 0
  6. >>> words
  7. defaultdict(<type 'int'>, {'xyz': 0})
  8. >>>

  

有序字典---collections.OrderedDict

以数据项插入的顺序进行存储,python3.1引入

有序字典在创建时,如果接收了无序的dict或关键字参数,则数据项顺序将是任意的。原因:在底层,python使用无序的dict传递关键字参数。使用update()方法时也有类似效果。

但如果在创建时,传递键-值对构成的元组列表,则顺序得以保留。

  1. 创建有序字典
  2. >>> import collections
  3. >>> d = collections.OrderedDict([('z',4),('e',1),('a',4)])
  4. >>> d
  5. OrderedDict([('z', 4), ('e', 1), ('a', 4)])
  6.  
  7. 递增式创建更常见
  8. >>> tasks = collections.OrderedDict()
  9. >>> tasks[1] = "Jim"
  10. >>> tasks[2] = "Jan"
  11. >>> tasks[3] = "Tom"
  12. >>> tasks
  13. OrderedDict([(1, 'Jim'), (2, 'Jan'), (3, 'Tom')])

 生成排序字典可通过 d = collections.OrderedDict(sorted(d.items()))来实现,但对于重新加入新的项再排序,则需要一定的开销。

 

 

Python字典--笔记的更多相关文章

  1. Python字典笔记

    1.字典是Python中=唯一的映射类型.映射类型对象里哈希值(键,key)和只指向的对象(值,value)是一对多的关系,一个字典是可变的,是一个容器类型.字典类型和序列类型(元组,列表)的不同在于 ...

  2. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  3. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  4. 【python学习笔记】4.字典:当索引不好用时

    [python学习笔记]4.字典:当索引不好用时 字典是python中唯一内建的map类型 创建: key可以为任何不可改变的类型,包括内置类型,或者元组,字符串 通过大括号: phonebook={ ...

  5. Python学习笔记3-Python元组、数组、字典集合的操作

    在Python中数组中的每一项可以是不同的数据类型 元组:只能读不能写的数组 aTuple=(1,'abc','tmc',79.0,False) print aTuple[1:3] print typ ...

  6. Python学习笔记(七)—字典的学习

    总结内容: 1.字典的定义 2.字典的好处 3.字典的增删改查 4.字典常用方法及内置函数 5.字典的多层嵌套 6.字典的循环 7.字典小练习 1.字典的定义 字典是另一种可变容器模型,且可存储任意类 ...

  7. python学习笔记:第五天( 字典)

    Python3 字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格 ...

  8. Python学习笔记(字典)

    今天学习一个python中的基本类型--字典(dictionary) 字典这种数据结构有点像我们平常用的通讯录,有一个名字和这个名字对应的信息.在字典中,名字叫做“键”,对应的内容信息叫做“值”.字典 ...

  9. [Python爬虫笔记][随意找个博客入门(一)]

    [Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...

随机推荐

  1. 『重构--改善既有代码的设计』读书笔记----Replace Temp with Query

    Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变 ...

  2. [ JS 进阶 ] 如何改进代码性能 (3)

    原文链接 总结一下 1.减少操作dom的次数 2.需要多次使用某全局变量的时候,将其赋给一个局部变量,避免重复查找 3.优化循环 4.多用逗号和直接赋值的方式来var,减少工厂方式和构造函数方式创建对 ...

  3. TP开发小技巧

    TP开发小技巧原文地址http://wp.chenyuanzhao.com/wp/2016/07/23/tp%E5%BC%80%E5%8F%91%E5%B0%8F%E6%8A%80%E5%B7%A7/ ...

  4. div(固定宽度和不固定宽度)居中显示的方法总结

    今天我总结一下css实现div居中的方法,有的是固定宽度的,还有的是不固定宽度的. 1.使用自动外边距实现DIV CSS居中 CSS中首选的让元素水平居中的方法就是使用margin属性—将元素的mar ...

  5. php 用于绘图使用的颜色数组

    $colorArr = array(0x912CEE, 0x99ff00, 0x312520, 0x801dae, 0x25f8cb, 0xCC3333, 0x808080, 0xa29b7c, 0x ...

  6. scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)

    scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...

  7. jqplot配置详解

    options = { seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#57 ...

  8. IOS--UIActivityIndicatorView的使用方法详细

    IOS--UIActivityIndicatorView的使用方法详细   // UIActivityIndicatorView的常用方法 活动指示器,就是旋转进度轮 UIActivityIndica ...

  9. iOS项目管理:目录结构和开发流程

    iOS项目管理:目录结构和开发流程     最近正在做一个大版本的更新,现在在重构中.... 发现很多人在一个项目的开始不知道开发流程是什么,也不是非常清晰的知道一个项目该有目录结构.如果项目小或者是 ...

  10. InstallShield FEQ

    Q: 如何替换setup.exe的图标? A: 这不是一个推荐的操作,因为可能会引起不可预见的错误,而且IS没有开放这个接口.如果你坚持要这么做,可以使用第三方软件比如ExeScope来进行图标替换. ...