1、字典是一种映射:包含下标(键)和值,每一个键都和一个值相关联,键和值之间的关联称为键值对
第1行:新建一个不包含任何项的字典;第2行:花括号表示一个空的字典。给字典添加新项,可以使用方括号操作符,如第3-6行;第7行为打印这个字典的结果,以冒号分隔
***字典中键值对的顺序可能并不相同***,字典是利用键查找对应的值
如果一个键不存在字典之中,会得到一个异常,如第8行
2、len函数返回键值对的数量
in操作符判断一个值是不是字典中的键(第11行),字典中的值不算(第12行);values方法可以查看一个值是不是出现在字典的值中,它返回一个值集合(第13行),利用in操作符判断某个值是否在值集合中(第15行)
***in操作符对列表和字典使用不同的算法实现。对于列表,按顺序搜索列表中的元素。对于字典,python使用一个称为散列表的算法,不管字典中有多少项,in操作符花费的时间都差不多。
3、使用字典作为计数器集合
建立一个字典,以字符为键,以计数器为相应的值。第一次遇到某个字符时,在字典中添加对应的项。之后可以增加一个已经存在的项的值
字典实现计数器的优势:我们并不需要预先知道字符串中可能出现哪些字母,因而只需为真正出现过的字母分配空间。
字典的get方法,接收一个键以及一个默认值。如果键出现在字典中,get返回对应的值(第19行);否则返回默认值(第21行)
4、如果在for循环中使用字典,会遍历字典的键,print_dist函数打印字典的每一个键以及对应的值
5、取出键为a对应的值为1
6、以上键的出现没有特定的顺序。要按顺序遍历所有的键,可以使用内置函数sorted
7、给定一个字典d和键k,找到对应的值v=d[k],以上可以解决
如果有v,想找到对应的键k,存在两个问题:①可能存在多个键映射到同一个值v上;②并没有进行反向查找的简单语法,需要使用搜索
下面是一个函数,接收一个值,并返回映射到该值的第一个键
raise语句会生成一个异常,LookupError,这是一个内置异常,通常用来表示查找操作失败。
8、字典和列表
每次循环,key从d中获取一个键,val获得对应的值。如果val不在inverse字典中,意味着我们还没有见过它,所以新建一个项,否则我们见过这个值,将相应的键附加到列表末尾。
详见《像计算机科学家一样思考Python》第11章