字典:是python中唯一的映射类型,字典中每一项都是由键-值对组成的项。字典中没有索引,只有键和值。键的类型可以是整型,变量或字符串。

创建和访问字典:

  1. >>> dict1 = {'Lining':'Anything is possible', 'Nike':'Just do is', 'Adidas':'Impossible is nothing'}
  2. >>> for i in dict1:
  3. ... print(i)
  4. ...
  5. Lining
  6. Adidas
  7. Nike
  8. >>> for i in dict1:
  9. ... print(dict1[i])
  10. ...
  11. Anything is possible
  12. Impossible is nothing
  13. Just do is
  14. >>> dict2 = {1:'one',2:'two',3:'three'}
  15. >>> dict2[3]
  16. 'three'
  17. >>> dict2[1]
  18. 'one'
  19. >>> dict2[0]
  20. Traceback (most recent call last):
  21. File "<stdin>", line 1, in <module>
  22. KeyError: 0
  23. >>> dict3 = dict((('a',97),('b',98),('c',99)))
  24. >>> dict3
  25. {'c': 99, 'b': 98, 'a': 97}
  26. >>> dict4 = dict(Jobs = 'stay hungry, stay foolish', Agan = 'run,run,run')
  27. >>> dict4
  28. {'Agan': 'run,run,run', 'Jobs': 'stay hungry, stay foolish'}

通过键可以访问和修改对应的值,若对一个不存在的键进行赋值,会创建一个新项。

  1. >>> dict1
  2. {'Lining': 'Anything is possible', 'Adidas': 'Impossible is nothing', 'Nike': 'Just do is'}
  3. >>> dict1['Lining'] = 'nothing is nothing'
  4. >>> dict1
  5. {'Lining': 'nothing is nothing', 'Adidas': 'Impossible is nothing', 'Nike': 'Just do is'}
  6. >>> dict1['nothing'] = 'nothing is nothing'
  7. >>> dict1
  8. {'Lining': 'nothing is nothing', 'Adidas': 'Impossible is nothing', 'Nike': 'Just do is', 'nothing': 'nothing is nothing'}

fromkeys()方法

dict.fromkeys(s[, v])  用s中的值作为键,v作为对应的值创建一个新的字典。

  1. >>> dict1 = {}
  2. >>> dict1
  3. {}
  4. >>> dict1.fromkeys([1,2,3],(1,2,3))
  5. {1: (1, 2, 3), 2: (1, 2, 3), 3: (1, 2, 3)}
  6. >>> dict1.fromkeys([1,2,3],'number')
  7. {1: 'number', 2: 'number', 3: 'number'}

keys() 返回字典键的引用

values() 返回字典的值的引用

items() 返回对应项的引用

  1. >>> dict1 = dict1.fromkeys(range(32), '赞')
  2. >>> dict1
  3. {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
  4. >>> for each in dict1.keys():
  5. ... print(each, end = ' ')
  6. ...
  7. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >>>
  8. >>> for each in dict1.values():
  9. ... print(each, end = ' ')
  10. ...
  11. >>>
  12. >>> for each in dict1.items():
  13. ... print(each, end = ' ')
  14. ...
  15. (0, '赞') (1, '赞') (2, '赞') (3, '赞') (4, '赞') (5, '赞') (6, '赞') (7, '赞') (8, '赞') (9, '赞') (10, '赞') (11, '赞') (12, '赞') (13, '赞') (14, '赞') (15, '赞') (16, '赞') (17, '赞') (18, '赞') (19, '赞') (20, '赞') (21, '赞') (22, '赞') (23, '赞') (24, '赞') (25, '赞') (26, '赞') (27, '赞') (28, '赞') (29, '赞') (30, '赞') (31, '赞') >>>
  16. >>> dict1.keys()
  17. dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])
  18. >>> dict1.values()
  19. dict_values(['赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞', '赞'])
  20. >>> dict1.items()
  21. dict_items([(0, '赞'), (1, '赞'), (2, '赞'), (3, '赞'), (4, '赞'), (5, '赞'), (6, '赞'), (7, '赞'), (8, '赞'), (9, '赞'), (10, '赞'), (11, '赞'), (12, '赞'), (13, '赞'), (14, '赞'), (15, '赞'), (16, '赞'), (17, '赞'), (18, '赞'), (19, '赞'), (20, '赞'), (21, '赞'), (22, '赞'), (23, '赞'), (24, '赞'), (25, '赞'), (26, '赞'), (27, '赞'), (28, '赞'), (29, '赞'), (30, '赞'), (31, '赞')])
  22. >>>

使用不存在的键访问一个字典时,会引发一个KeyError异常。

  1. >>> dict1[32]
  2. Traceback (most recent call last):
  3. File "<stdin>", line 1, in <module>
  4. KeyError: 32

这时,可以使用get方法。

  1. >>> dict1.get(32)
  2. >>> dict1.get(32,'no exist')
  3. 'no exist'

可以通过成员关系操作符(in,not in)来判断一个键是否在字典中

  1. >>> 31 in dict1
  2. True
  3. >>> 32 in dict2
  4. False

字典的成员操作比序列更加高效,序列时通过不断迭代来判断的,而字典时基于hash的查找。

清空字典:clear()

  1. >>> dict1
  2. {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
  3. >>> dict2 = dict1
  4. >>> dict1 = {}
  5. >>> dict1
  6. {}
  7. >>> dict2
  8. {0: '赞', 1: '赞', 2: '赞', 3: '赞', 4: '赞', 5: '赞', 6: '赞', 7: '赞', 8: '赞', 9: '赞', 10: '赞', 11: '赞', 12: '赞', 13: '赞', 14: '赞', 15: '赞', 16: '赞', 17: '赞', 18: '赞', 19: '赞', 20: '赞', 21: '赞', 22: '赞', 23: '赞', 24: '赞', 25: '赞', 26: '赞', 27: '赞', 28: '赞', 29: '赞', 30: '赞', 31: '赞'}
  9. >>> dict1 = dict2
  10. >>> dict1.clear()
  11. >>> dict1
  12. {}
  13. >>> dict2
  14. {}

字典拷贝:copy()

  这是浅拷贝,和直接赋值不同。浅拷贝,深拷贝都是对一个对象的浅层或深层的拷贝,但是,直接赋值则只是多了一个别名。

  1. >>> a = {1:'one',2:'two',3:'three'}
  2. >>> b = a.copy()
  3. >>> c = a

  a,c是同一个对象的两个不同的名字,修改其中任意一个都会是另一个的值发生改变,因为本质上修改对方和修改自己是一样的。而b则是另一个不同的对象,对a或c作任何改变都不会印象b,反过来亦是如此。

pop() 给出键,弹出值

popitem() 随机弹出一个项

  1. >>> a.pop(2)
  2. 'two'
  3. >>> c
  4. {1: 'one', 3: 'three'}
  5. >>> c.popitem()
  6. (1, 'one')
  7. >>> b
  8. {1: 'one', 2: 'two', 3: 'three'}

setdefault() 和get类似,但找不到键时进行添加

  1. >>> a.setdefault('white')
  2. >>> a
  3. {'white': None, 3: 'three'}
  4. >>> a.setdefault('white',5)
  5. >>> a
  6. {'white': None, 3: 'three'}
  7. >>> a.setdefault('black',5)
  8. 5
  9. >>> a
  10. {'white': None, 'black': 5, 3: 'three'}
  11. >>> a.setdefault('black',5)
  12. 5
  13. >>> a.setdefault('black',6)
  14. 5
  15. >>> a
  16. {'white': None, 'black': 5, 3: 'three'}

update() 利用一个字典或映射关系去更新一个字典

  1. >>> a
  2. {'white': None, 'black': 5, 3: 'three'}
  3. >>> b
  4. {1: 'one', 2: 'two', 3: 'three'}
  5. >>> a.update(b)
  6. >>> a
  7. {1: 'one', 2: 'two', 3: 'three', 'white': None, 'black': 5}

python学习笔记(十四)之字典的更多相关文章

  1. python学习第十四天字典的del(),pop().popitem(),clear()删除方法

    字典的每个键值 key=>value 数据类型,字典的key是唯一的,Value可以一样 names={'玖乐公司网址':‘www.96net.com.cn’,"电池网":' ...

  2. python 学习笔记十四 jQuery案例详解(进阶篇)

    1.选择器和筛选器 案例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  3. python学习笔记(十 四)、web.py

    使用web.py 通过python进行网页的编写,下面我们来简单了解一哈web.py 的使用 1 url处理 使用特定的url结构来解析我们发送的请求.如下面所示: urls = ( '/login' ...

  4. python学习笔记十四:wxPython Demo

    一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets ...

  5. python 学习笔记(十四)有依赖关系的接口开发

    接口开发中存在很多有依赖关系的接口,例如:BBS中发帖的时候就需要进行校验用户是否登录,那么此时发帖的接口就与用户登录接口有依赖关系.在发帖时就需要先获取用户的session,与当前登录用户进行校验对 ...

  6. python学习笔记(十四): unittest

    Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 在说unittest之前,先说几个概念: TestC ...

  7. python学习笔记(十四)python实现发邮件

    import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...

  8. python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例

    python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...

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

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

  10. Python学习笔记(四)

    Python学习笔记(四) 作业讲解 编码和解码 1. 作业讲解 重复代码瘦身 # 定义地图 nav = {'省略'} # 现在所处的层 current_layer = nav # 记录你去过的地方 ...

随机推荐

  1. sharepoint content type publishing

    1. Create 1 Project Team sites (Site1) on SharePoint(可以用普通site)2. Go to http://<PCName>:8080/_ ...

  2. bzoj4568-幸运数字

    题目 给出一棵树,每个节点上有权值\(a_i\),多次询问一条路径上选择一些点权值异或和最大值.\(n\le 2\times 10^4,q\le 2\times 10^5,0\le a_i\le 2\ ...

  3. 【bzoj3573】[HNOI2014]米特运输 树形dp

    题目描述 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市为首都.这N个城 ...

  4. Contest 4

    A:cf原题.当然是不是也没什么关系. #include<iostream> #include<cstdio> #include<cstdlib> #include ...

  5. C++解析(6):函数参数的扩展

    0.目录 1.函数参数的默认值 2.函数默认参数的规则 3.函数占位参数 4.小结 1.函数参数的默认值 C++可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 参数的 ...

  6. 洛谷 P2421 A-B数对(增强版)

    题目描述 给出N 个从小到大排好序的整数,一个差值C,要求在这N个整数中找两个数A 和B,使得A-B=C,问这样的方案有多少种? 例如:N=5,C=2,5 个整数是:2 2 4 8 10.答案是3.具 ...

  7. 基于注解的spring mvc 中使用 ajax json 的model

    在 Spring mvc3中,响应.接受 JSON都十分方便. 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON. 使用 @RequestBod ...

  8. Spring Boot系列教程二:创建第一个web工程 hello world

    一.创建工程 创建名称为"springboot_helloworld"的spring boot工程, new->Spring Starter Project,直接上图     ...

  9. 【MVVM 原生】原生MVVM的使用

    一.前言       前些天需要完成一个任务,该任务属于公司的一些核心代码,为了避免不必要的麻烦,任务要求不能使用第三方的MVVM框架,必须用原生的. 平时习惯了Dev与MVVMLight,遇上原生的 ...

  10. 【bzoj1878】[SDOI2009]HH的项链

    考虑非莫队的离线算法.. 若[l,r]中有重复数值很麻烦,考虑取一个数为代表(最左或最右) 1.最左:用BIT,先把所有第一个出现的数扔进去,将询问左端点升序,每次都可能产生历史的无用点,并出现新的“ ...