欢迎关注小睿的微信公众号:郭小睿同学
,每天更新小知识、笔记、案例、学习资源~
什么是字典?
它提供了一种灵活的访问
和组织数据的方式
。
像列表一样,字典是许多值的集合
。但是字典的下标就比较牛皮了,字典的索引可以使用许多不同的数据类型,不只是整数。
字典的索引被称为“键”
,键与其所对应的值被称为“键值对”
。
myCat = {'name': 'Tom', 'size': 'fat', 'color': 'black'}
这将一个字典赋值给myCat变量,这个字典的键是"name"、“size"和"color”,值分别是"Tom"、“fat"和"black”。我们可以通过这些键访问其中对应的值。
myCat = {'name': 'Tom', 'size': 'fat', 'color': 'black'}
print("我的猫:名字叫" + myCat['name'] + ",大小:" + myCat['size'] + ",颜色:" + myCat['color'])
运行这段程序,输出如下:
我的猫:名字叫Tom,大小:fat,颜色:black
字典与列表的爱恨情仇
字典中的表项是不排序的,字典中没有“第一个”表项。虽然确定两个列表是否相同时,表项的排序
很重要。但是在字典中,并没有显得那么重要啦~
spam1 = ['a', 'b', 'c', 'd', 'e']
spam2 = {'index1': 'a', 'index2': 'b', 'index3': 'c', 'index4': 'd', 'index5': 'e'}
print(spam1 == spam2)
运行这段程序,输出如下:
False
因为字典是不排序的,所以不能像列表那样切片(分割)
。
当我们去访问字典中不存在的键时候,就会报错——KeyError
。与列表的越界
很像(IndexError)。
小实例——学生信息录入
student = {'guowenrui': '20', 'zhangyaqi': '21'}
while True:
print("请输入一个学生的信息:(直接回车即退出程序)")
name = input()
if name == '':
break
if name in student:
print(name + '的年龄是' + student[name])
else:
print('我不知道' + name + '的信息。')
print('请录入~')
day = input()
student[name] = day
print("信息已经录入。")
功能描述:
我首先创建了一个字典,已经录入了部分学生的信息,保存到student中。用in关键字,查看用户输入的学生是否作为键在字典中。
如果名字存在在字典中,我就可以通过将它作为键,访问其关联的值。
如果不在,我们就可以通过一些骚操作像其中添加键及对应的值。
运行这个程序,结果如下:
请输入一个学生的信息:(直接回车即退出程序)
郭文睿
我不知道郭文睿的信息。
请录入~
20
信息已经录入。
请输入一个学生的信息:(直接回车即退出程序)
zhangyaqi
zhangyaqi的年龄是21
请输入一个学生的信息:(直接回车即退出程序)
郭文睿
郭文睿的年龄是20
请输入一个学生的信息:(直接回车即退出程序)
keys()、values()和items()方法
这三个字典方法,它们将返回类似列表的值,分别对应与字典的键
,值
和键值对
。
这三个方法,他们返回的不是真正的列表,它们不具有被修改的方法
。
spam1 = {'name': 'guowenrui', 'age': '20'}
for i in spam1.keys():
print(i)
for i in spam1.values():
print(i)
for i in spam1.items():
print(i)
运行这个程序,结果如下:
name
age
guowenrui
20
('name', 'guowenrui')
('age', '20')
如果我们需要得到一个真正的列表,我们将其返回值传递给list()
函数。
spam1 = {'name': 'guowenrui', 'age': '20'}
print(list(spam1.keys()))
运行这个程序,结果如下:
['name', 'age']
检查字典中是否存在键或值
我们可以使用in
或not in
来检查字典中是否存在键或者值。
spam1 = {'name': 'guowenrui', 'age': '20'}
print('name' in spam1.keys())
get()方法
get()方法,有两个参数:要取得其值的键
,以及如果该键不存在时,返回的值
。
spam1 = {'name': 'guowenrui', 'age': '20'}
print(str(spam1.get('name', 0)))
print(str(spam1.get('hh', 0)))
运行这个程序,结果如下:
guowenrui
0
setdefault()方法
当你需要为字典中某个键设置一个默认值的时候,当某键没有任何值时使用它。
spam1 = {'name': 'guowenrui', 'sex': 'man', 'age': 20}
print(spam1)
spam1.setdefault('lover', 'zhangyaqi')
print(spam1)
运行这个程序,结果如下:
{'name': 'guowenrui', 'sex': 'man', 'age': 20}
{'name': 'guowenrui', 'sex': 'man', 'age': 20, 'lover': 'zhangyaqi'}
小实例——计算每个字符出现的次数
message = 'I love zhangyaqi'
count = {}
for i in message:
count.setdefault(i, 0)
count[i] = count[i] + 1
print(count)
运行这个程序,结果如下:
{'I': 1, ' ': 2, 'l': 1, 'o': 1, 'v': 1, 'e': 1, 'z': 1, 'h': 1, 'a': 2, 'n': 1, 'g': 1, 'y': 1, 'q': 1, 'i': 1}
漂亮的打印
导入pprint
模板,我们就可以使用pprint()和pformat()函数打印出漂亮的字。
import pprint
message = 'I love zhangyaqi'
count = {}
for i in message:
count.setdefault(i, 0)
count[i] = count[i] + 1
pprint.pprint(count)
运行这个程序,结果如下:
{' ': 2,
'I': 1,
'a': 2,
'e': 1,
'g': 1,
'h': 1,
'i': 1,
'l': 1,
'n': 1,
'o': 1,
'q': 1,
'v': 1,
'y': 1,
'z': 1}
如果想要得到打印的文本作为字符串,而不是显示在屏幕上,我们可以使用pprint.pformat()
。
pprint.pformat(count)