创建和使用字典
字典由多个键以及对应值构成 “键-值” 对组成(“键-对” 通常也叫做 “项”),每个键和他的值之间用冒号(:)隔开,项之间用逗号(,)隔开,而整个字典是由一对大括号括起来的。空字典(不包括任何项)由两个大括号组成。
phonebook = {‘Alice’:‘15868171095’,‘Jack’:‘523145’,‘Arthur’:‘1234567’}
1.dict函数
使用dict函数,通过其他映射(比如其他字典)或者(键,值)对的序列建立字典。
dict函数也可以通过关键字来创建字典,如下例所示:
尽管这可能是dict函数最有用的功能,但是还能映射作为dict函数的参数,以建立其项与映射相同的字典(如果不带任何参数,则dict函数返回一个空字典,就像list,tuple以及str等函数一样)。
2.基本字典的操作
字典的基本行为在很多方面与序列(sequence)类似:
- len(d)返回d中项的数量;
- d[k]返回关联到键k上;
- d[k]=v将值v关联到k键上;
- del d[k]删除键为k的项;
- k in d检查d中是否有含有键为k的项
字典和列表有很多相同的特性,但是也有一些重要的区别:
- 键类型:字典的键不一定为整数类型,键可以是任意的不可变类型,比如浮点类型,字符串或者元组。
- 自动添加:即使键期初在字典中并不存在,也可以为它赋值,这样字典就会建立新的项。而不能将值关联到列表范围之外的索引上 (不使用append方法或者其他类似操作情况下)
- 成员资格:表达式k in d(d为字典)查找的是键,而不是值。表达式v in l(l为列表)则用来查找值,而不是索引。这样看起 来好像有一些不太一致,但是当习惯以后就会感觉非常自然了
第一:键是任意不可变类型(这也是字典最强大的地方)。
第二:我试图将字符串‘Foobar’关联到一个空列表的42号位置上(很明显不可能因为这个位置不存在)。为了将其变为可能,我们需要用[None]*43或者其他方式初始化x,而不能仅仅用[ ]。但是,下一个例子工作得更加好。我将‘Foobar’关联到空字典的键42上,没问题,新的项已近添加到字典中了。
3.字符串的格式化字符串
在每个转换说明符中的%字符后面,可以加上键(用圆括号括起来),后面再跟上其他说明元素。
除了增加字符串键之外,转换说明符还是像以前一样工作。当以这种方式使用字典的时候,只要给出所有的键都能在字典中找到,就可以使用任意数量的转换说明符。这类字符串格式化在模板系统中非常有用