学习Python第二周的第五天
常用数据结构之字典
Python程序中的字典跟现实生活中的字典很像,它以键值对(键和值的组合)的方式把数据组织到一起,我们可以通过键找到与之对应的值并进行操作。就像《新华字典》中,每个字(键)都有与它对应的解释(值)一样,每个字和它的解释合在一起就是字典中的一个条目,而字典中通常包含了很多个这样的条目。
1、字典的创建
在Python中创建字典可以使用{}
字面量语法,这一点跟上一节课讲的集合是一样的。但是字典的{}
中的元素是以键值对的形式存在的,每个元素由:
分隔的两个值构成,:
前面是键,:
后面是值,代码如下所示。
# 字面量语法
student1 = {
'id': 1034,
'name': 'zhou',
'sex': True,
'birthday': 1998-5
}
print(student1)
# 构造器函数
student2 = dict(id=1034, name='zhou', sex=True)
print(student2)
2、字典的运算
student1 = {
'id': 1034,
'name': 'zhou',
'sex': True,
'birthday': 1998
}
print(student1)
# 遍历字典中的键
for key in student1.keys():
print(key)
print('-' * 20)
# 遍历字典中的值
for value in student1.values():
print(value)
print('-' * 20)
# 遍历字典中的键值对
for key, value in student1.items():
print(key, value)
student = dict(id=1034, name='zhou', sex=True, birthday=1998)
# 字典的索引运算放在赋值运算符的左边,且索引对应的键是存在的,就更新它的值
student['name'] = '小黄'
student['sex'] = False
# 字典的索引运算放在赋值运算符的左边,但字典中没有对应的索引,就增加一组新的“键值对”
student['address'] = '重庆'
print(student)
print('name' in student)
print('age' in student)
print('address' in student)
# 使用get函数通过key获取value时,如果key不存在,不会发生keyError错误,
# 而是得到一个None(空值)或者是你指定的默认值。
print(student.get('age'))
print(student.get('age', 20))
print(student.get('name'))
# 删除键值对--->键必须存在,如果不存在会产生KeyError错误
# del student['name']
print(student.pop('name'))
# 如果要使用下标(索引)运算,那么必须要保证键一定存在
if 'birthday' in student:
print(student['birthday'])
3、字典的相关操作
dict1 = {'A': 100, 'B': 200, 'C': 300}
dict2 = {'D': 400, 'E': 500, 'A': 600}
# 更新(元素的合并或更新)
dict1.update(dict2)
print(dict1)
# 删除
del dict1['B']
print(dict1) # 直接删除,不会返回删除的值
print(dict1.pop('A')) # 会把删除的元素返回
print(dict1)
dict1.popitem() # 是删除最后一个键值对
print(dict1)
# 输入一段话,统计每个英文字母出现的次数
x = input('请输入一段话:')
b = {}
for i in range(26):
b[f'{chr(i + 97)}'] = x.count(f'{chr(i + 97)}')
print(b)
# 方法二
import string
results = {letter: 0 for letter in string.ascii_lowercase}
print(results)
content = input('请输入:').lower()
for ch in content:
if ch in results:
results[ch] += 1
for key, value in results.items():
print(f'{key}: {value:>2d}次')
4、例题
字典中保存了股票信息,完成下面的操作
1.找出股票价格大于100元的股票并创建一个新的字典
2.找出价格最高和最低的股票对应的股票代码
3.按照股票价格从高到低给股票代码排序
stocks = {
'AAPL': 191.88,
'GOOG': 1186.96,
'IBM': 149.24,
'ORCL': 48.44,
'ACN': 166.89,
'FB': 208.09,
'SYMC': 21.29
}
# new_stcoks = {}
# for key, value in stocks.items():
# if value > 100:
# new_stcoks[key] = value
# print(new_stcoks)
new_stcoks = {key: value for key, value in stocks.items() if value > 100}
print(new_stcoks)
print('-' * 35)
# 找出价格最高和最低的股票对应的股票代码
print(max(zip(stocks.values(), stocks.keys()))[1])
# 分解动作
zip_obj = zip(stocks.values(), stocks.keys())
max_value = max(zip_obj)
print(max_value[1])
print(min(zip(stocks.values(), stocks.keys()))[1])
zip_obj = zip(stocks.values(), stocks.keys())
min_value = min(zip_obj)
print(min_value[1])
print('-' * 33)
# 改进
print(max(stocks, key=stocks.get))
print(min(stocks, key=stocks.get))