本篇教程部分内容超出现在所学知识范围,但并没有超出你的能力范围,对于字典的遍历,我将放到for循环章节中进行讲解,对于新知识,你应当抱有学习的热情,主动搜索资料学习他们,积极探索,是掌握一门编程语言的最佳路径。
直接从字典里取值,面临一定的风险,比如下面的代码
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
print(score_dict['小丽'])
程序会报错
Traceback (most recent call last):
File "/Users/zhangdongsheng/experiment/test/test.py", line 7, in <module>
print(score_dict['小丽'])
KeyError: '小丽'
使用一个在字典中不存在的key,会引发异常,为了避免这种异常,通常有两种方法,先来说第一种方法
在使用key之前,先判断这个key是否存在,存在了取值,不存在则根据业务要求采取对应的措施
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
if '小丽' in score_dict:
print(score_dict['小丽'])
else:
print("字典里没有小丽的分数")
字典的get方法是非常实用的方法,该方法可以指定两个参数,一个是key,另一个是key不存在时返回的数据,默认范围None
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
print(score_dict.get('小丽'))
上面的代码中,要获取'小丽'这个key所对应的value,但是'小丽'不存在于字典中,因此get方法默认返回None,如果你希望get方法在key不存在时返回0,你可以这样写
print(score_dict.get('小丽', 0))
bool类型是int类型的子类,1和 Ture是相等,0和False是相等的,如果使用字典时,1已经做了key,那么你再用True去做key,就会修改1所对应的value,下面是一个简单示例
int_dict = {
1: '1做key',
True: 'True做key'
}
print(int_dict)
执行代码,输出结果为
{1: 'True做key'}
一个列表里存放了若干个单词
lst = ['']
现在要求你统计每个单词出现的次数,并将单词与单词出现的次数存储到字典中
你可以这样实现代码
lst = ['green', 'white', 'black', 'white', 'green', 'green']
info = {}
for word in lst:
if word not in info:
info[word] = 0
info[word] += 1
print(info)
上面的代码虽然完成了要求,但是不够优雅,不符合python一贯的简洁作风,你应该使用setdefault方法让代码看起来更加简洁
lst = ['green', 'white', 'black', 'white', 'green', 'green']
info = {}
for word in lst:
info.setdefault(word, 0)
info[word] += 1
print(info)
setdefault方法尝试为key设置默认值,如果这个key已经存在,那么setdefault什么都不做,如果key不存在,则向字典里新增一个key-value键值对,value就是方法里的第二个参数。
上面的代码里,如果单词不存在于字典中,则设置这个单词所对应的value为0,info[word] += 1 等价于 info[word] = info[word] + 1 ,实现了单词出现次数加1的目的
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
现在要求你输出字典里每一个学生的姓名和分数,你可以使用for循环来完成这个题目
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key in score_dict:
print(key, score_dict[key])
上面的代码,不够优雅,建议你使用items()方法来实现遍历
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key, value in score_dict.items():
print(key, value)
代码看起来是不是简明一些呢,省去了使用key获取value的过程,items()方法返回一个可迭代对象,使用for循环遍历这个可迭代对象时,得到的是一个元组,元组内包含key和 value
下面的代码向你揭示items()方法返回的对象的本质面目
from collections import Iterable
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
iter_obj = score_dict.items()
print(isinstance(iter_obj, Iterable))
for item in iter_obj:
print(item)
程序输出结果为
True
('小明', 96)
('小刚', 98)
('小红', 94)
QQ交流群: 211426309