文章目录
我们前四章分别讲了列表(list)
、元组(tuple)
、集合(set)
、字符串(string)
,但是这些数据类型还不足以帮助我们解决所有的问题。例如,我们要保存多个人的信息,包括姓名、年龄、体重、单位地址、家庭住址、本人手机号、紧急联系人手机号等信息,你会发现我们之前学过的列表、元组和集合都不是最理想的选择。所以我们还需字典(dictionary)类型,这种数据类型最适合把相关联的信息组装到一起,并且可以帮助我们解决程序中为真实事物建模的问题。
一、字典的创建
1. 字面量语法
在Python中创建字典可以使用{}
字面量语法,这一点跟上一节课讲的集合是一样的。但是字典的{}
中的元素是以键值对的形式存在的,每个元素由:
分隔的两个值构成,:
前面是键,:
后面是值,代码如下所示。
student1 = {
'id': 1001,
'name': '小张不脱发',
'sex':True
'birthday': '2000'
}
print(student1)
# {'id': 1001, 'name': '小张不脱发', 'sex': True, 'birthday': '2000'}
通过上面的代码,相信大家已经看出来了,用字典来保存一个人的信息远远优于使用列表或元组,因为我们可以用:
前面的键来表示条目的含义,而:
后面就是这个条目所对应的值。
当然,如果愿意,我们也可以使用内置函数dict
或者是字典的生成式语法来创建字典,代码如下所示。
2.构造器函数语法
使用内置函数dict
创建字典
student2 = dict(id=1002, name='小张不脱发', birthday='2000',sex=True )
print(student2)
# {'id': 1002, 'name': '小张不脱发', 'birthday': '2000', 'sex': True}
3. 生成式(推导式)语法
dict1 = {i: i ** 2 for i in range(10)}
print(dict1)
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
4. 内置函数zip压缩两个序列并创建字典
zip会将前后两个结构中的元素一一对应加入字典,如果元素个数不够将舍弃。
# 通过Python内置函数zip压缩两个序列并创建字典
items1 = dict(zip('ABCDE', '12345'))
print(items1) # {'A': '1', 'B': '2', 'C': '3', 'D': '4', 'E': '5'}
items2 = dict(zip('ABCDE', range(1, 10)))
print(items2) # {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5}
二、字典的运算
对于字典类型来说,成员运算和索引运算肯定是最为重要的,前者可以判定指定的键在不在字典中,后者可以通过键获取对应的值或者向字典中加入新的键值对。值得注意的是,字典的索引不同于列表的索引,列表中的元素因为有属于自己有序号,所以列表的索引是一个整数;字典中因为保存的是键值对,所以字典的索引是键值对中的键,通过索引操作可以修改原来的值或者向字典中存入新的键值对。需要特别提醒大家注意的是,字典中的键必须是不可变类型,例如整数(int
)、浮点数(float
)、字符串(str
)、元组(tuple
)等类型的值;显然,列表(list
)和集合(set
)是不能作为字典中的键的,当然字典类型本身也不能再作为字典中的键,因为字典也是可变类型,但是字典可以作为字典中的值。关于可变类型不能作为字典中的键的原因,我们在后面的课程中再为大家详细说明。这里,我们先看看下面的代码,了解一下字典的成员运算和索引运算。
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
# 检查name和tel两个键在不在person字典中
print('name' in student, 'tel' in student) # True False
# 字典的索引运算放在赋值运算符的左边
# 如果索引对应的键是存在的,就更新它的值
student['name'] = '汪美丽'
student['sex'] = False
print(student)
# {'id': 1002, 'name': '汪美丽', 'sex': False, 'birthday': '2000-4-1'}
# 如果字典中没有对应的索引,就增加一组新的"键值对"
student['address'] = '四川成都'
print(student)
# {'id': 1002, 'name': '汪美丽', 'sex': False, 'birthday': '2000-4-1', 'address': '四川成都'}
# 检查student字典中键值对的数量
print(len(student)) # 5
三、字典的方法
字典类型的方法基本上都跟字典的键值对操作相关,可以通过下面的例子来了解这些方法的使用。
get()
方法
使用get函数通过key获取value时,如果存在则返回对应的值;如果key不存在,不会发生KeyError错误而是得到一个None(空值)或者是你指定的默认值
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
print(student.get('age')) # None
print(student.get('age', 20)) # 20
print(student.get('name', '无名氏')) # 小张不脱发
pop()
方法
使用pop方法通过键删除对应的键值对并返回该值
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
stu1 = student.pop('id')
print(stu1) # 1002
# stu2 = students.pop('age') # KeyError: 'age'
stu2 = student.pop('age', {})
print(stu2) # {}
popitem()
方法
使用popitem方法删除字典中最后一组键值对并返回对应的二元组如果字典中没有元素,调用该方法将引发KeyError异常
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
key, value = student.popitem()
print(key, value) # birthday 2000-4-1
setdefault()
方法
setdefault可以更新字典中的键对应的值或向字典中存入新的键值对
setdefault方法的第一个参数是键,第二个参数是键对应的值
如果这个键在字典中存在,则返回键的值,
如果这个键在字典中不存在,则插入默认值的关键字。
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
result = student.setdefault('name', '汪美丽')
print(result) # 小张不脱发
print(student) # {'id': 1002, 'name': '小张不脱发', 'sex': True, 'birthday': '2000-4-1'}
result = student.setdefault('age', 18)
print(result) # 18
print(student) # {'id': 1002, 'name': '小张不脱发', 'sex': True, 'birthday': '2000-4-1', 'age': 18}
update()
方法
使用update更新字典元素,相同的键会用新值覆盖掉旧值,不同的键会添加到字典中。
student = dict(id=1002, name='小张不脱发', sex=True, birthday='2000-4-1')
others = {'age': 18, 'favorite': '吃', 'birthday': '2002.3'}
student.update(others)
print(student)
# {'id': 1002, 'name': '小张不脱发', 'sex': True, 'birthday': '2002.3', 'age': 18, 'favorite': '吃'}
删除
跟列表一样,从字典中删除元素也可以使用del
关键字,在删除元素的时候如果指定的键索引不到对应的值,一样会引发KeyError
异常,具体的做法如下所示。
person = {'name': '王大锤', 'age': 25, 'sex': True}
del person['age']
print(person) # {'name': '王大锤', 'sex': True}
遍历字典中的键
代码如下所示:
s1 = {'苹果': 1, '西瓜': 2, '草莓': 3}
# 方法一
for key in s1:
print(key, end=' ') # 苹果 西瓜 草莓
# 方法二
for key in s1.keys():
print(key, end=' ') # 苹果 西瓜 草莓
遍历字典中的值
代码如下所示:
s1 = {'苹果': 1, '西瓜': 2, '草莓': 3}
for value in s1.values():
print(value, end=' ') # 1 2 3
遍历字典中的键值对
代码如下所示:
s1 = {'苹果': 1, '西瓜': 2, '草莓': 3}
for key, value in s1.items():
print(key, value) # 苹果 1
# 西瓜 2
# 草莓 3
四、字典的应用
我们通过几个简单的例子来讲解字典的应用。
例子1:输入一段话,统计每个英文字母出现的次数。
sentence = input('请输入一段话: ')
counter = {}
for ch in sentence:
if 'A' <= ch <= 'Z' or 'a' <= ch <= 'z':
counter[ch] = counter.get(ch, 0) + 1
for key, value in counter.items():
print(f'字母{key}出现了{value}次.')
例子2:在一个字典中保存了股票的代码和价格,找出股价大于100元的股票并创建一个新的字典。
说明:可以用字典的生成式语法来创建这个新字典。
stocks = {
'AAPL': 191.88,
'GOOG': 1186.96,
'IBM': 149.24,
'ORCL': 48.44,
'ACN': 166.89,
'FB': 208.09,
'SYMC': 21.29
}
stocks2 = {key: value for key, value in stocks.items() if value > 100}
print(stocks2)
以上就是字典的基础知识,涉及到的方法很多,还需要多多练习呀。Get It!