扎实基础深入篇(五):字典也就是个弟弟

在本篇博客中,你将能学习到能够将相关信息关联起来的Python字典,以及一些对字典的操作。

在讲正事之前,不能忘了上一篇博客布置下来的作业:

执行以下操作以创建一个程序,该程序模拟网站如何确保每个人都有唯一的用户名。
 •列出包含五个或更多用户名的列表current_users;再列出包含五个新用户名的列表new_users,
确保一个或两个新用户名也在当前用户列表中。
 •循环浏览新用户列表,查看每个新用户名是否已被使用。如果有,请打印一条消息,说明此人需要输入新的用户名。
如果没有使用用户名,请打印一条消息,说明用户名可用。
 •确保你的比较不区分大小写。如果使用了“john”,则不应接受“JOHN”

答案如下:

current_users=["Master","paopao","mary","Alice","jack"]
new_users=["mack","tom","Mary","alice","james"]
current_users_1=[]
for oldname in current_users:
    oldname=oldname.lower()
    current_users_1.append(oldname)
for newname in new_users:
    if newname.lower() in current_users_1:
        print(newname,"你好,你注册的名字已被占用,请重新注册。")
    else:
        print(newname,"你好,你注册的名字可用。")

输出结果:

mack 你好,你注册的名字可用。
tom 你好,你注册的名字可用。
Mary 你好,你注册的名字已被占用,请重新注册。
alice 你好,你注册的名字已被占用,请重新注册。
james 你好,你注册的名字可用

如果有对本段代码不懂的同学,可以亲自来问我。当然,有更好优化代码方案的,请务必告诉我。

一个简单的字典示例

student={"name":"master","age":18}
print(student["name"])
print(student["age"])

 字典student存储了一个学生的名字和年龄,使用print()来打印结果,会看见:

master
18

字典的概念

在python中,字典是一系列的键-值对,每一个键都与一个值相对应,使用的符号是大括号{ }。

你可以使用键来访问与之相对应的值,与键相关联的值可以是数字、字符串、列表乃至字典。

字典dict的公式:{key1:value1,key2:value2,...}

键和值之间用冒号分隔,键-值对与键值对用逗号隔开。

创建字典并学会如何访问值

我们来创造一个包含更多学生信息的字典:

student={
    "name":"master",
    "age":18,
    "sex":"",
    "class":"软件一班",
    "teacher":"Mr.Lee"
    }

我们知道,去使用键来访问值:

#获取学生的名字
print(student["name"])
#获取学生的性别
print(student["sex"])
#获取学生的班级
print(student["class"])

可以看到结果如下所示:

master

软件一班

添加新的键-值对和修改键的值

首先复习一下列表如果想要添加新的元素的时候,有哪几种方法:

list_1.append() :末尾追加一个新的元素

list_1.insert():某索引位置加入新的元素

小提示:为什么不直接命名list?--->关键词不能用来做变量名

字典添加新的键-值对相对于列表是非常方便的:

student["school"]="哈佛大学"
student["address"]="热河路"

然后我们print(student)来看看字典发生了怎么样的变化:

{
    'name': 'master',
    'age': 18,
    'sex': '',
    'class': '软件一班',
    'teacher': 'Mr.Lee',
    'school': '哈佛大学',
    'address': '热河路'
}

是不是非常快速多了,只需要给字典的索引上创一个新的键,等于号后面写上所对应的值,就可以产生新的键-值对了。

那么实际上我这个student字典非常不贴实际的,存在吹牛逼的成分,master考上哈佛大学,有那么牛逼吗?

那么如何修改字典里面的值呢?

student["age"]=20
student["school"]="野鸡大学"
print(student)

我们可以发现,字典修改值和列表修改元素的方法都一样,给指定索引重新定义数据就可以完成修改:

{
    'name': 'master',
    'age': 20, 
    'sex': '',
    'class': '软件一班', 
    'teacher': 'Mr.Lee', 
    'school': '野鸡大学',
    'address': '热河路'
}

现在这个student字典里的信息是不是看上去顺眼多了?

删除键-值对

我们在上面使用student字典的过程中,键"teacher":值"Mr.Lee"这一对并没有用过。

所以,我们就考虑删除掉这一对,删除的方法使用del:

del student["teacher"]
print(student)

删除的方法,字典和列表也一样,用del删除指定的键,就能删除掉键-值对,不再出现。

{
    'name': 'master',
    'age': 20, 
    'sex': '',
    'class': '软件一班', 
    'school': '野鸡大学',
    'address': '热河路'
}

使用for遍历字典

①遍历所有的键-值对

首先有student字典:

{
    'name': 'master',
    'age': 20, 
    'sex': '',
    'class': '软件一班', 
    'school': '野鸡大学',
    'address': '热河路'
}

如何将这些数据更为直观的键-值打印在窗口上:

for key,value in student.items():
    print("键:",key)
    print("值:",value)
    print()

要注意的是,字典并不能直接与for相结合使用:

这时,items()应运而生,它的作用是把字典转换为列表形式,键-值对转换为元组。

dict_items([('name', 'master'), ('age', 20), ('sex', '男'), ('class', '软件一班'), ('school', '野鸡大学'), ('address', '热河路')])

输出结果:

键: name
值: master

键: age
值: 20

键: sex
值: 男

键: class
值: 软件一班

键: school
值: 野鸡大学

键: address
值: 热河路

②遍历字典中的所有键

在这儿,我们要重新定义一个字典,来帮助你完成更好理解这个小节:

一个学生字典,学生名字为键,年龄为值

student={
    "张三":18,
    "李四":20,
    "王五":22,
    "马六":23
}

现在,我要遍历出这个字典的所有人的名字:

for name in student.keys():
    print(name)

keys()方法极为有用,也不需要经过一些复杂的转换列表操作,可以直接提取出所有的键。

输出结果:

张三
李四
王五
马六

③遍历字典中的所有值

和上面方法一样,直接使用values方法提取所有的值。

for name in student.values():
    print(name)

输出结果:

18
20
22
23

字典的嵌套用法

①列表存储字典元素

我们创建三个学生信息的字典,含有姓名和年龄:

student1={"name":"张三","age":18}
student2={"name":"李四","age":19}
student3={"name":"王五","age":20}

然后,我们可以把这三个字典,存储到列表里作为元素:

student_list=[student1,student2,student3]
print(student_list)

输出结果:

[{'name': '张三', 'age': 18}, {'name': '李四', 'age': 19}, {'name': '王五', 'age': 20}]

②字典存储列表值

我在上面提过一句话:

你可以使用键来访问与之相对应的值,与键相关联的值可以是数字、字符串、列表乃至字典。

在上面我们已经见识了数字和字符串类型作为值,现在来看一看列表作为值的情况:

在上面中,我们认识了张三,李四和王五,现在调查他们的爱好,得到下面的结果

张三的爱好:编程,游泳和打游戏

李四的爱好:编程,看书和踢足球

王五的爱好:撩妹,喝酒和打游戏

然后,他们都是来自软件一班,就用appclass_one作为字典变量,

他们的名字作为键,他们的爱好作为值并用列表的形式:

appclass_one={
    "张三":["编程","游泳","打游戏"],
    "李四":["编程","看书","踢足球"],
    "王五":["撩妹","喝酒","打游戏"]
}

现在,我们将这个字典数据以更为直观的形式出现在打印窗口:

for people,favourites in appclass_one.items():
    print(people+"的爱好如下:")
    for favourite in favourites:
        print("	",favourite)
    print()

先来看看输出结果:

张三的爱好如下:
         编程
         游泳
         打游戏

李四的爱好如下:
         编程
         看书
         踢足球

王五的爱好如下:
         撩妹
         喝酒
         打游戏

那么要考虑到一些零基础的同学,可能会一时无法理解代码的原理,我可以给出大概的解释如下:

第一行肯定是先提取出键和值出来,items()是转换成列表形式,

缩进之后来到第二行,打印出人名的爱好消息,这时候如果来到第三行直接打印,

第三行直接是一行列表形式的爱好,肯定不够直观,而且我不想要看见列表的符号,

所以再对这个列表进行提取每个元素处理,把每个元素但独占一行,

“ ”是横向制表符,也就是制造横向空格,让整体效果更为直观。

最后一行的print()属于换行,然后继续访问字典里第二个人名……

③字典存储字典值

字典的值也可以是字典的形式,比如定义一个班级字典,里面有很多学生的信息:

appclass_one={
    "student1":{"name":"张三","age":18},
    "student2":{"name":"李四","age":19},
    "student3":{"name":"王五","age":20}
}

如果想像上面一样出题目的话,其实也不用浪费笔墨,多用一次items()方法即可。

作业来袭:

创建一个名为cities的字典,其中将三个城市名用作键,对于每个城市的所属省份、人口数、是否为省会等等创建一个字典作为值。

然后以更为直观的形式打印出这些信息在输出窗口。

恭喜你!字典在你面前成功地做了弟弟,接下来的一篇博客你将接触到while循环和input获取用户输入。

建议再次复习往期博客加强复习!

原文地址:https://www.cnblogs.com/Masterpaopao/p/10324640.html