字典中的每个元素表示一种映射关系或对应关系,根据提供的“键”作为下标就可以访问对应的“值”,如果字典中不存在这个“键”会抛出异常,例如:
1 >>> adict = {‘address‘: ‘SDIBT‘, ‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘age‘: 38} 2 >>> 3 >>> adict[‘age‘] #指定的键存在,返回对应的值 4 38 5 >>> 6 >>> adict[‘nothing‘] #指定的键不存在,抛出异常 7 Traceback (most recent call last): 8 File "<pyshell#286>", line 1, in <module> 9 adict[‘nothing‘] #指定的键不存在,抛出异常 10 KeyError: ‘nothing‘ 11 >>> 12 >>> 13 >>> #作者又用了断言,后边会详细解释的 14 >>> 15 >>> assert ‘nothing‘ in adict,‘Key "nothong" not in adict‘ 16 Traceback (most recent call last): 17 File "<pyshell#291>", line 1, in <module> 18 assert ‘nothing‘ in adict,‘Key "nothong" not in adict‘ 19 AssertionError: Key "nothong" not in adict 20 >>>
为了避免程序运行时引发异常而导致崩溃,在使用下标的方式访问字典元素是,最好能配合条件判断或者异常处理结构,例如:
1 >>> adict = {‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘age‘: 38} 2 >>> 3 4 >>> if ‘Age‘ in adict: #首先判断字典中是否存在指定的“键” 5 print(adict[‘Age‘]) 6 else: 7 print(‘Not Exists.‘) 8 9 10 Not Exists. 11 >>> 12 13 #使用异常处理结构 14 >>> try: 15 print(adict[‘address‘]) 16 except: 17 print(‘Not Exists.‘) 18 19 20 Not Exists. 21 >>> 22 23 24 #上述方法虽然能够满足要求,但是代码显得非常啰嗦,更好的办法就是字典对象提供了一个get()方法用来返回指定“键”对应的“值”,更秒的是这个方法允许指定该键不存在是返回特定的“值”,例如 25 >>> adict 26 {‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘age‘: 38} 27 >>> 28 >>> adict.get(‘age‘) #如果字典中存在该“键”,则返回对应的“值” 29 38 30 >>> 31 >>> adict.get(‘nothing‘,‘Not Exists.‘) #指定的键不存在时返回指定的默认值 32 ‘Not Exists.‘ 33 >>> 34 >>>
字典对象的 setdefault() 方法用于返回指定“键”对应的“值”,如果字典中不存在该“键”,就添加一个新元素并设置该“键”对应的“值”,例如:
1 >>> adict 2 {‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘sex‘: ‘male‘, ‘age‘: 38} 3 >>> 4 >>> adict.setdefault(‘nothing‘,‘nothing‘) #字典增加新元素 5 ‘nothing‘ 6 >>> 7 >>> adict 8 {‘score‘: [98, 97], ‘name‘: ‘Dong‘, ‘nothing‘: ‘nothing‘, ‘sex‘: ‘male‘, ‘age‘: 38} 9 >>> 10 >>> adict.setdefault(‘age‘) 11 38 12 >>>
最后,当对字典对象进行迭代时,默认是遍历字典的“建”,这一点必须清醒地记在那资历。当然,可以使用字典对象的items()方法返回字典中的元素,即所有“键:值”对,字典对象的keys()方法返回所有“键”,values()方法返回所有“值”。例如
1 >>> for item in adict.items(): #明确指定遍历字典的元素 2 print(item) 3 4 5 (‘score‘, [98, 97]) 6 (‘name‘, ‘Dong‘) 7 (‘nothing‘, ‘nothing‘) 8 (‘sex‘, ‘male‘) 9 (‘age‘, 38) 10 >>> 11 >>> 12 >>> adict.items() 13 dict_items([(‘score‘, [98, 97]), (‘name‘, ‘Dong‘), (‘nothing‘, ‘nothing‘), (‘sex‘, ‘male‘), (‘age‘, 38)]) 14 >>> 15 >>> adict.keys() 16 dict_keys([‘score‘, ‘name‘, ‘nothing‘, ‘sex‘, ‘age‘]) 17 >>> 18 >>> adict.values() 19 dict_values([[98, 97], ‘Dong‘, ‘nothing‘, ‘male‘, 38]) 20 >>>
小提示:内置函数len()、max()、min()、sum()、sorted()以及成员测试运算符in也适用于字典对象,但默认是用作用字典的“键”。若想作用于元素,即“键:值”对,则需要使用字典对象的items()方法明确指定;若想作用于“值”,则需要使用values()明确指定。