ch4 字典
来源:互联网 发布:mac滴管粉底液 编辑:程序博客网 时间:2024/05/21 09:32
4.1 字典的使用
- 一种通过名字引用值的数据结构,这种结构类型称为映射,字典中的值没有特殊的顺序,但是都存储在一个特定的键里,键可以是数字、字符串甚至是元组。
4.2 创建和使用字典
- 字典可以通过下面的方式创建:
>>>phonebook = {'Alice' : '2341' , 'Beth' : '9102' , 'Cecil' : '3258'}
- 字典由多个键及与其对应的值构成的对组成,每个键和它的值之间用冒号隔开,项之间用逗号隔开,整个字典用一对大括号括起来。
字典中的键是唯一的,而值并不唯一。
4.2.1 dict函数
- 可以用dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。
>>>items = [('name' , 'Gumby'),('age' , 42)]>>>d = dict(items)>>>d{'age': 42, 'name': 'Gumby'}>>>d['name']'Gumby'
- dict函数也可以通过关键字参数来创建字典
>>>d = dict(name='Gumby' , age=42)>>>d{'age': 42, 'name': 'Gumby'}
4.2.2 基本字典操作
- 字典的基本行为在很多方面与序列类似
- len(d)返回d中项的数目
- d[k]返回关联到键k上的值
- d[k]=v将值v关联到键k上
- del d[k]删除键为k的项
- k in d检查d中是否有含有键为k的项
- 字典和列表有很多特性相同,但也有一些区别
- 键类型:字典的键不一定为整型数据,也有可能是其他不可变类型,比如浮点型,字符串或者元组
- 自动添加:即使那个键起初在字典中并不存在,也可以为它分配一个值,这样字典就会建立新的项。而(在不使用append方法或者其他类似操作的情况下)不能将值关联到列表范围之外的索引上。
- 成员资格:查找的是键,而不是值。
4.2.3 字典的格式化字符串
- 可以用字典格式化字符串,在每个转换说明符中的%后面,可以加上键,后面再跟上其他说明元素。
>>>phonebook{'Beth': '9102', 'Alice': '2341', 'Cecil': '3258'}>>>"Cecil's phone number is%(Cecil)s."% phonebook"Cecil's phone number is 3258."
4.2.4 字典方法
1. clear方法:clear方法清除字典中的所有项,这是个原地操作,所以没有返回值。
2. copy方法:返回一个具有相同键-值对的新字典(实现浅复制,因为值本身就是相同的,而不是副本)
>>>x = {'username': 'admin', 'machines': ['foo','bar','baz']}>>>y = x.copy()>>>y['username'] = 'mlh'>>>y['machines'].remove('bar')>>>y{'username': 'mlh', 'machines': ['foo', 'baz']}>>>x{'username': 'admin', 'machines': ['foo', 'baz']}
- 可以看出,当在副本中替换值的时候,原始字典不受影响,但是,如果修改了某个值,原始的字典也会改变,因为同样的值也存储在原字典中。可以用深复制避免这个问题,复制其包含的所有值。
>>>from copy import deepcopy>>>d = {}>>>d['names'] = ['Alfred', 'Bertrand']>>>c = d.copy()>>>dc = deepcopy(d)>>>d['names'].append('Clive')>>>c{'names': ['Alfred', 'Bertrand', 'Clive']}>>>dc{'names': ['Alfred', 'Bertrand']}
3.fromkeys方法
fromkeys方法使用给定的键建立新的字典,每个键默认对应的值为None
>>>{}.fromkeys(['name', 'age']){'age': None, 'name': None}
>>>dict.fromkeys(['name', 'age']){'age': None, 'name': None}
- 也可以自己提供默认值
>>>dict.fromkeys(['name', 'age'], '(unknown)'){'age': '(unknown)', 'name': '(unknown)'}
4. get方法
- get方法是个更宽松访问字典项的方法。一般来说,如果试图访问字典中不存在的项是会出错,而用get就不会
>>>d = {}>>>print d['name']Traceback (most recent call last): File "G:\python\test.py", line 2, in <module> print d['name']KeyError: 'name'>>>print d.get('name')None
- 也可以自定义默认值,替换None
>>>d.get('name', 'N/A')'N/A'
5. has_key
- has_key可以检查字典中是否含有给出的键。表达式d.has_key(k)相当于表达式k in d。Python3.0不包含这个函数。
>>>d = {}>>>d.has_key('name')False>>>d['name'] = 'Eric'>>>d.has_key('name')True
6. items和iteritems
- items方法把所有的字典项以列表方式返回,这些列表项中的每一项来自于(键,值),但是项在返回时没有特殊的顺序。
>>>d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}>>>d.items()[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
- iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表:
>>>it = d.iteritems()>>>it<dictionary-itemiterator object at 0x0163FB70>>>>list(it) #convert the iterator to a list[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]
7. keys和iterkeys
- keys方法将字典中的键以列表形式返回,而iterkeys则返回针对键的迭代器。
8. pop
- pop方法用来获得对应于给定键的值,然后将这个键-值对从字典中移除
>>>d = {'x':1, 'y': 2}>>>d.pop('x')1>>>d{'y': 2}
9. popitem
- popitem类似于list.pop,后者会弹出列表中的最后一个元素,但是popitem会弹出随机的项,因为字典没有最后的元素相关的顺序概念。
10. setdefault
- setdefault方法在某种程度上类似于get方法,就是能够获得与给定键相关联的值,除此以外,setdefault还能在字典不含有给定键的情况下设定相应的键值。
>>>d = {}>>>d.setdefault('name', 'N/A')'N/A'>>>d{'name': 'N/A'}>>>d['name'] = 'Gumby'>>>d.setdefault('name','N/A')'Gumby'>>>d>>>{'name': 'Gumby'}
11. update
- update方法可以利用一个字典项更新另外一个字典,提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
12. values和itervalues
- values方法以列表的形式返回字典中的值(itervalues返回值的迭代器)。与返回键的列表不同的是,返回值的列表中可以包含重复的元素。
>>>d = {}>>>d[1] = 1>>>d[2] = 2>>>d[3] = 3>>>d[4] = 1>>>d.values()[1,2,3,1]
4.3 小结
- 映射
- 利用字典格式化字符串
- 字典的方法
0 0
- ch4 字典
- Ch4-MaxSubArray
- California Mathmetics-G6-Ch4
- Accelerated C++ Exercises Ch4
- ch4 初始化和清除
- Ch4 应用编程接口
- 通信原理 ch4信道
- 锋利的jquery--CH4
- iPhone Application Programming Guide, Ch4
- ch4. Web容器和Tomcat
- DeepLearning(Bengio,ch4)-数值计算
- ch4-深入py流程控制
- 复变函数ch4-级数
- 字典
- 字典
- 字典
- 字典
- 字典
- iOS 网络解析
- javascript 读取单选按钮、复选框以及下拉列表的当前值
- 蒙特霍尔问题与我那餐盒饭
- bitmap C语言实现
- ZOJ 3475(机智的暴力)
- ch4 字典
- POJ 2689
- Visual Studio程序打包软件——InstallShield(2)
- iPhone自动旋转控制代码-IOS开发
- java解析xml的几种方式
- Excel 学习笔记
- 前缀中缀后缀表达式及其互相转换
- MPMediaPickerController 选取本地音频
- 用JAVA读取XML文件