第四章 字典:当索引不好用时

4.1 字典的使用

字典的适用场景:

表示一个游戏棋盘的状态,每个键都是由坐标值组成的元组;

存储文件修改时间,用文件名作为键;

数字电话/地址簿

4.2 创建和使用字典

如下的“键-值”对就是字典

>>> phonebook = {'alice':'2341', 'beth':'9876'}
>>> phonebook['alice']
'2341'

4.2.1 dict函数

可以用dict函数,通过其他映射或键-值对的序列建立字典。

>>> items = [('name','gumby'),('age',42)]
>>> d = dict(items)
>>> d['name']
'gumby'
>>> d
{'name': 'gumby', 'age': 42}

也可以通过关键字参数来创建字典:

>>> d = dict(name='gumby', age = 42)
>>> d
{'name': 'gumby', 'age': 42}

4.2.2 基本字典操作

>>> len(d)           // 字典长度
2
>>> d["name"]     // 取得键对应的值
'gumby'
>>> d["name"] = "aaaa"  // 赋值
>>> d
{'name': 'aaaa', 'age': 42}
>>> del d["name"]         // 删除
>>> d
{'age': 42}
>>> "name" in d           // 检查键是否在字典中
False

键类型:字典的键不一定为整型数据,可以是任意的不可变类型,比如浮点数,字符串或者元组。

自动添加:即使键起初不在字典中,也可以为他赋值,这样字典就会建立新项。

>>> x = []                              //  不合法,因为这是一个列表
>>> x[42] = 5
Traceback (most recent call last):
File "<pyshell#147>", line 1, in <module>
x[42] = 5
IndexError: list assignment index out of range

>>> x = {}                               // 合法,这是一个映射
>>> x[42] = "fsd"
>>> x
{42: 'fsd'}

注意:   ( )  -   元组

[ ]   -   序列

         { }   -  字典

4.2.3 字典的格式化字符串

>>> var = {"beth":'9102', "cecil":'3258'}
>>> "%(cecil)s" % var            // 可以用键
'3258'

4.2.4 字典的方法

 1)clear

清楚字典的所有项,原地操作,无返回值

>>> var
{'beth': '9102', 'cecil': '3258'}
>>> var.clear()
>>> var
{}            // 空字典

 2)copy  返回相同键-值对的新字典(这个方法是浅复制)

>>> x = {'username':'admin','machines':['foo','bar','baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y['username'] ='newname'              // 替换某个值,原始字典不受影响
>>> y['machines'].remove('bar')            // 如果修改了某个值(原地修改,而不是替换),原始字典也会改变,
>>> y
{'username': 'newname', 'machines': ['foo', 'baz']}   
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}

避免上述浅复制问题的方案是,使用深复制deepcopy

 3)fromkeys:用给定的键建立新字典,每个键对应的值是NONE

>>> {}.fromkeys(['name','age'])
{'name': None, 'age': None}

>>> dict.fromkeys(['name','age'],'(unknown)')         
{'name': '(unknown)', 'age': '(unknown)'}

 4)get

>>> d = {}
>>> d["anem"]             // 这种方式访问不存在的键会抛出异常
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
d["anem"]
KeyError: 'anem'
>>> d.get("fsd")         // get不会抛出异常,当访问不存在的键的时候
>>>

 5) has_key : python 3不支持

 6) items 和iteritems

 7) keys和iterkeys

 8)pop:  得到给定的键的值,并删除

>>> d
{'anme': 'fds'}
>>> d.pop('anme')
'fds'
>>> d
{}

 9) popitem:弹出随机的项(用于一个一个移除并处理)

10) setdefault: 如果键存在,返回对应的值;如果不存在,则返默认值并更新。

>>> d
{}
>>> d.setdefault('name',"jj")
'jj'
>>> d
{'name': 'jj'}

11) update:  利用一个字典项更新另外一个字典。 提供的项会被添加到旧的字典中,如果键存在,就覆盖。

最新文章

  1. java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得
  2. ASP.NET MVC随想录——创建自定义的Middleware中间件
  3. 行列式(三):n阶行列式
  4. jquery中append()、prepend()、after()、before()的区别详解
  5. 智能车学习(四)&mdash;&mdash; Cmp学习
  6. 【转】使用Xcode 6将你的项目本地化
  7. VS2015+win10+opencv3.0整个安装过程
  8. 20141017--循环语句whlie,do
  9. PAT_1026 程序运行时间
  10. 自定义key解决zabbix端口监听取值不准确的问题
  11. InnoDB引擎Myslq数据库数据恢复
  12. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理
  13. currval &amp;nextval的差异理解
  14. Testing - 软件测试知识汇总
  15. 手把手教你整合最优雅SSM框架
  16. DPDK无法分出大页面:EAL: No free hugepages reported in hugepages-2048kB 解决方法
  17. pairwork(黄敬博12061156和黄伟龙12061172)
  18. react+webpack+wepack-dev-server的环境中ant design图标离线的方法
  19. USB ISP(ICSP) Open Programmer &lt; PWM ADC HV PID &gt;
  20. SVN-001

热门文章

  1. css 中的background:transparent到底是什么意思有什么作用
  2. Java泛型中的标记符含义
  3. spring3: AOP 之 6.2 AOP的HelloWorld
  4. Ajax基础(二)--获取服务器文件
  5. 阿里云上如何利用yum安装jenkins
  6. pxcook-高效易用的自动标注工具, 生成前端代码
  7. MYSQL(python)安装记录
  8. Stylus的基础用法
  9. 【Wannafly挑战赛9-C】列一列(斐波那契)
  10. 用Spring和c3p0工具简单的实现增删改查