python——字典数据类型

欢迎关注小睿的微信公众号:郭小睿同学,每天更新小知识、笔记、案例、学习资源~
在这里插入图片描述

什么是字典?

在这里插入图片描述
它提供了一种灵活的访问组织数据的方式
像列表一样,字典是许多值的集合。但是字典的下标就比较牛皮了,字典的索引可以使用许多不同的数据类型,不只是整数。
字典的索引被称为“键”,键与其所对应的值被称为“键值对”

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']

检查字典中是否存在键或值

我们可以使用innot 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)
发布了54 篇原创文章 · 获赞 48 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/coder_gwr/article/details/89852855