需要将一些列值组合成数据结构并通过编号来访问各个值时,列表很有用。本章介绍一种通过名称来访问各个值的数据结构。这种数据结构称为映射。字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数,字符串,元组(不可改变的)
字典的名称指出了其用途,图书适合从头到尾的顺序阅读如果你愿意可快速翻到任何一页,这有点像列表。字典(日常生活中的字典和python字典)旨在让你能够轻松找到特定的单词(键),以获悉其定义(值)。
创建和使用字典
字典以类似下面的表示:
phone={‘alice’:‘2132’,‘beth’:9102}
字典由其键和相应的值组成,这种键-值对 称为项,在上面的示例中,键为名字,值为电话号码,每个键和值之间用:分隔,项之间用逗号分隔,而整个字典放在括号内。空字典用俩个花括号来表示类似于{}.
我们介绍的每一种数据结构都有一个函数将其他的数据结构变为对应数据结构的形式,例如列表的 list函数,元组的tuple函数,字符串的str,那字典呢也有就是dict
>>> items=[('1','2'),('3','4')]
>>> d=dict(items)
>>> d
{'1': '2', '3': '4'}
>>>d['1']
'2'
还可以使用关键字实参来调用这个函数,如下所示:
>>> a=dict(name=234,age=125)
>>>> a
>{'name': 234, 'age': 125}
尽管这可能是函数dict最常见的用法,但也可以用映射实参来调用它,这将创建一个字典。像list,tuple,str一样,如果调用这个函数时没有提供任何实参,将返回一个空字典。
字典的基本行为在很多方面都类似于序列
1. len(d):返回字典d包含的项(键值对)数。
2. d[k]:返回与键k相关联的值。
3. d[k]=v:将值V关联到键k
4. del d[k]:删除键为k的项
1. k in d: 检查字典d是否有包含k的项
虽然字典和列表有多个相同之处,但也有一些重要的不同之处。
键
键的类型:字典中的键可以是整数,但并非必须是整数。字典中的键可以是任何不可变的类型,如浮点数(实数),字符串或元组
自动添加:即便是字典中原本没有的键,也可以给它赋值,这将在字典中创建一个新项。
成员资格:表达式 k ind (其中d 是一个字典)*查找的是键而不是值。
具体和列表差别看下面例子
>>> x=[]
>>>> x[42]='foo'
>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> x={}
>>> x[43]='foo'
>>> x
{43: 'foo'}
首先,我尝试将字符串’foo’给一个空列表中索引为42的元素。这显然不可能,因为没有这样的元素。要让这个操作可行,初始化x时,必须使用[none]*43之类的代码,创建一个有那么多元素的列表,接下来的尝试可行
我们将’foo’赋值给了一个空字典的键43。
第三章介绍过方法format,可在有些情况下,通过在字典储存一些列命名的值,可让格式设置更容易一些,例如,可在字典中包含各种信息,这样只需在格式字符串中提取所需的信息即可,为此必须使用format_map来指出你将通过一个映射来提供所需的信息。
>>> phonebook={'beth':'9102','alice':'2341','ceil':'3258'}
>>> "ceil's phone number is {ceil}".format_map(phonebook)
"ceil's phone number is 3258"