1 字典
在Python中,字典是一系列键值对。每个键都与一个值关联,可以使用键来访问与之关联的值。值可以是数字、字符、列表、字典本身等,实际上,可以将任意Python对象用作字典的值。
在Python中,字典用{key1:value1,key2:value2}格式表示。键值对包含两个互相关联的值。当指定键时,Python将返回与之关联的值。在字典中,想存储多少个键值对都可以。
1.1 访问字典中的值
要获取值的内容,可以指定字典名并把键放在后面的方括号内。示例:
python
person = {'name' : '张三', 'age' : 20}
print(f"姓名:{person['name']},年龄:{person['age']}")

1.2 添加键值对
字典是一种动态结构,可随时在其中动态添加键值对。要添加键值对,可依次指定字典名、用方括号括起来的键与该键关联的值。在上面的示例中添加键值对:
python
person = {'name' : '张三', 'age' : 20}
person['birthday'] = '1988-06-19'
person['性别'] = '男'
print(f"姓名:{person['name']},年龄:{person['age']},生日:{person['birthday']},性别是:{person['性别']}")
print(person)

字典会保留定义时的元素排列顺序。
1.3 创建字典
首先创建一个空字典,然后添加键值对。示例:
python
person = {}
person['姓名'] = '张三'
person['性别'] = 20
print(person)

1.4 修改字典的值
要修改字典值,可依次指定字典名、用方括号括起来的键和与键关联的新值。
python
person = {}
person['姓名'] = '张三'
person['性别'] = 20
print(f"修改前:{person}")
person['性别'] = 30
print(f"修改后:{person}")

python
person = {}
person['姓名'] = '张三'
person['年龄'] = 15
if person['年龄'] < 18:
print(f"{person['姓名']},你未满18周岁")
else:
print(f"{person['姓名']},你已满18周岁")
person['年龄'] = 30
if person['年龄'] < 18:
print(f"{person['姓名']},你未满18周岁")
else:
print(f"{person['姓名']},你已满18周岁")

1.5 删除键值对
使用del语句删除键值对。使用del时,必须指定字典名和要删除的键。
python
person = {'name' : '张三', 'age' : 20}
print(f"删除前:{person}")
del person['age']
print(f"删除后:{person}")

1.6 使用字典存储类型的对象
可以使用字典存储众多对象的同一类信息。
python
likes = {
'张三' : '看电影',
'李四' : '打游戏',
'王五' : '听音乐'
}
if likes['张三'] == '看电影':
print(f"张三请你看{likes['张三']}")
if likes['李四'] == '打游戏':
print(f"李四请你打{likes['李四']}")

1.7 使用get()访问值
上面的示例中使用方括号内的键从字典中取值,如果键不存在则报错。
python
person = {'name' : '张三'}
print(person['age'])

为了避免字典中出现这种报错,可使用get()方法在指定的键不存在时,返回一个默认值。get()方法的第一个参数用于指定键,不可缺少。第二个参数当指定的键不存在时要返回的值,可选。
python
person = {}
print(person.get('name'),'无名')
print(person.get('age'))

2 遍历字典
遍历字典时,可以遍历所有的键值对,也可以只遍历键或值。
2.1 遍历所有的键值对
python
likes = {
'zhangsan' : 'movie',
'lisi' : 'music',
'wangsu' : 'food'
}
for key,value in likes.items():
print(f"\nKeys:{key}")
print(f"values:{value}")

2.2 遍历字典中所有的键
python
likes = {
'zhangsan' : 'movie',
'lisi' : 'music',
'wangsu' : 'food'
}
for key in likes.keys():
print(key.title())

注意:在遍历字典时,会默认遍历所有的键。上面代码可以简化为:
python
likes = {
'zhangsan' : 'movie',
'lisi' : 'music',
'wangsu' : 'food'
}
for key in likes:
print(key.title())

2.3 遍历字典中的所有值
使用value()方法获取字典中的值。它会返回一个值列表。
python
likes = {
'zhangsan' : 'movie',
'lisi' : 'music',
'wangsu' : 'food',
'zhangsi' : 'movie'
}
for value in likes.values():
if value == 'movie':
print(f"{value}")

可以看到,value()方法会获取所有的值,不会去重。如果要去重,可以使用集合set。
python
likes = {
'zhangsan' : 'movie',
'lisi' : 'music',
'wangsu' : 'food',
'zhangsi' : 'movie'
}
for value in set(likes.values()):
if value == 'movie':
print(f"{value}")

3 嵌套
将多个字典存储到列表中或将列表作为值存储到字典中,称为嵌套。可以在列表中嵌套字典,在字典中嵌套列表,字典中嵌套字典。
3.1 字典列表
python
zhangsan = {'age' : 25 , 'birthday' : '1997-01-01'}
lisi = {'age' : 26 , 'birthday' : '1997-01-02'}
wangwu = {'age' : 27 , 'birthday' : '1997-01-03'}
students = [zhangsan, lisi, wangwu]
for student in students:
print(student)

实际开发中,有时候需要创建一个空列表,动态生成字典添加到列表中。
python
persons = []
for person in range(20):
new_person = {'name' : 'zhangsan','age' : 20}
persons.append(new_person)
for person in persons:
print(person)

3.2 在字典中存储列表
有时候,需要将列表存储到字典中。
python
colours = ['red', 'green', 'blue', 'yellow', 'purple']
languages = ['Python', 'Java', 'JavaScript', 'JavaScript']
all_ = {'colours': colours, 'languages': languages}
for key, value in all_.items():
print(key, value)

3.3 字典中存储字典
python
persons = {'zhangsan' : 20, 'lisi' : 21}
students = {'info' : persons , 'class' : '三年二班'}
for key, value in students.items():
print(key, value)

4 用户输入
4.1 input()函数的工作原理
input()函数让程序暂停运行,等待用户输入一些文本。获取用户输入后 ,Python将其赋给一个变量,后续使用。
python
message = input('请输入姓名:')
print(message)

4.2 使用int()获取数值
在使用input()函数时,Python会将用户输入的内容默认为字符串。如果用户希望输入数值类型,可以使用int()函数把字符串转换为数值。
python
age = input("请输入年龄: ")
if int(age) >= 18:
print(f"你的年龄是{int(age)},已成年")
else:
print(f"你的年龄是{int(age)},未成年")

4.3 求模运算符
在处理数值信息时,求模运算符(%)会经常用到,它将两个数相除并返回余数。例如,可以使用求模运算符判断数字是偶数还是奇数。
python
message = input('请输入一个数字: ')
if int(message) % 2 == 0:
print(f"{int(message)},是偶数")
else:
print(f"{int(message)},是奇数")
5 while循环
for循环针对集合中的某个元素执行一个代码块,while循环则不断地执行,直到指定的条件不满足为止。
python
num = 1
while num <= 10:
print(num)
num += 1

5.1 让用户选择何时退出
定义一个退出值,只要用户输入的不是这个值,程序就一直运行。
python
message = ''
while message != 'exit':
message = input('请输入退出值: ')
print(message)

5.2 使用标志
上面的示例中,让程序在满足指定条件时执行特定的任务。但在更复杂的程序中,有很多不同的事件会导致程序停止运行。这时,可以定义一个变量,用于判断整个程序是否处于活动状态。这边变量称为标志。如果标志为True时,循环继续运行,如果标志为False,则退出循环。使用标志对上面程序进行改造。
python
flag = True
while flag:
message = input('请输入退出值: ')
if message == 'exit':
flag = False
print('退出程序')
else:
print(message)
5.3 使用break退出循环
不管条件测试的结果如何,想立即退出循环,可使用break语句。break语句用户控制程序流程,可用来控制哪些代码将执行,哪些代码不再执行。
python
while True:
message = input('请输入退出值: ')
if message == 'exit':
break
else:
print(message)

5.4 continue语句
如果要退出本次循环,继续执行下次循环,可使用continue语句。例如,打印从1到10之间的奇数:
python
num = 0
while num < 10:
num += 1
if num % 2 == 0:
continue
print(num)

5.5 使用while循环处理列表和字典
使用for循环遍历列表时,不应该在循环的同时修改列表,否则导致Python难以跟踪其中的元素。如果想再遍历列表的同时还可以修改列表,可以使用for循环。
5.5.1 在列表之间移动元素
定义一个有值的列表和一个空列表,使用while循环移动列表元素
python
colours = ['blue', 'green', 'red', 'yellow', 'purple', 'brown']
colours_new = []
while colours:
colours_new.append(colours.pop())
print(f"colours的内容{colours}")
print(f"colours_new的内容{colours_new}")

5.5.2 删除列表元素指定的值
前面的内容中,使用remove()函数可以删除列表中指定的值,之所以可行是因为要删除的值在列表中只出现一次。如果要删除的值在列表中出现多次,可以使用while循环删除。
python
colours = ['blue', 'green','blue', 'red','blue','yellow','blue', 'purple','blue', 'brown','blue']
while 'blue' in colours:
colours.remove('blue')
print(colours)
print(colours)
