- images
- results
- .gitignore
- 1.1概论.ipynb
- 1.2 环境配置.pdf
- 1.3数据类型.ipynb
- 1.4 人机交互.ipynb
- 1.5 对象与变量.ipynb
- 1.6 编码与命名规范.ipynb
- 2.1 数值类型.ipynb
- 2.2 数值类型转换.ipynb
- 2.3 数值元算.ipynb
- 2.4常用数学运算函数.ipynb
- 2.5 math 模块及其应用.ipynb
- 2.6.1 逻辑值测试.ipynb
- 2.6.2 成员运算.ipynb
- 2.6.3 比较运算.ipynb
- 2.6.4 布尔运算.ipynb
- 2.6.5 运算优先级.ipynb
- 2.ipynb
- 3.1 流程控制结构.ipynb
- 3.3.1 for 循环语句.ipynb
- 3.3.3 rang.ipynb
- 3.3.3 while 循环语句.ipynb
- 3.4 and 3.5 分支结构和条件.ipynb
- 3.6 and 3.7 .ipynb
- 3.9 异常处理.ipynb
- 4 函数和模块化编程.ipynb
- 4.1 函数的定义、调用与返回值.ipynb
- 4.2 函数的参数传递.ipynb
- 4.3 变量的作用域.ipynb
- 4.4 匿名函数.ipynb
- 4.5 递归.ipynb
- 4.6 内置函数.ipynb
- 4.7 模块化程序设计.ipynb
- 5.1 序列通用操作.ipynb
- 5.1.1 索引.ipynb
- 5.1.2 切片.ipynb
- 5.1.3 序列拼接与重复.ipynb
- 5.1.4 成员测试.ipynb
- 5.2.1 字符串的创建.ipynb
- 5.2.2 字符串常量.ipynb
- 5.2.4 字符串的遍历.ipynb
- 5.2.5 文件遍历.ipynb
- 5.2.6 字符串的处理方法.ipynb
- 5.2.7 字符串格式化.ipynb
- 5.2.8 转义字符.ipynb
- 5.3 random 模块及其应用.ipynb
- 6.1 元组.ipynb
- 6.2 列表.ipynb
- 6.2.1 列表的创建.ipynb
- 6.2.2 列表的更新.ipynb
- 6.2.3 列表的删除.ipynb
- 6.2.4 列表的排序.ipynb
- 6.2.5 列表赋值与复制.ipynb
- 6.2.6 列表推导式.ipynb
- 6.2.8 常用内置函数.ipynb
- 6.2.9 列表嵌套及其排序.ipynb
- 6.3 列表综合应用.ipynb
- 7.1.1 集合的创建.ipynb
- 7.1.2可变集合类型的操作.ipynb
- 7.1.3 成员关系.ipynb
- 7.1.4 集合关系.ipynb
- 7.1.5 集合运算.ipynb
- 7.2.1 字典创建.ipynb
- 7.2.2 获取字典值.ipynb
- 7.2.3 修改字典值.ipynb
- 7.2.4内置函数与方法.ipynb
- 7.2.5字典排序输出.ipynb
- 7.3 集合与字典的应用.ipynb
- 8 中 numpy 概述.ipynb
- 8 中panda 库.ipynb
- 8.1 文件的打开与关闭.ipynb
- 8.2 文件读写操作.ipynb
- 8.3 文件的应用.ipynb
- 8.4 numpy 文件操作.ipynb
- 8.4.2 and 3.ipynb
- 8.5.1 pandas文件读写.ipynb
- 8.5.2 and 3 and 4.ipynb
- 9.1 matplotlib 线性图.ipynb
- 9.1.5 数据文化绘图.ipynb
- 9.2 非线性图.ipynb
- 9.3 词云.ipynb
- _overview.md
- _readme.ipynb
- coding_here.ipynb
- dream.png
- score.txt
- score_total.csv
- 成绩分析综合.json
7.2.2 获取字典值.ipynb @master — view markup · raw · history · blame
获取字典值¶
字典是一种无序序列类型,不能使用**序号索引**的方式获取字典的值。
字典内部的数据具有“键”和“值”的映射关系,字典一般通过**“键”**来访问其“值”。
根据键值查询字典中的元素的速度很快,这是基于字典巨大的内存开销获得的,属于典型的空间换时间。
语法为:
dict[key]
实例 6.4 通讯录查询¶
构建一个字典,存储姓名和对应的电话号码
{'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
利用这个字典开发一个简单的通讯录程序。具备简单的查询、更新、插入、删除等功能。
本节先实现查询的功能,实现输入一个姓名,查询对应的电话号码的功能。

# 用字典存储数据的通讯录程序,查询功能
phonebook_dict = {'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
# 索引方法实现查询功能
name = input('请输入要查询的联系人姓名:')
print(name + ":" + phonebook_dict[name]) # 以输入的人名为键访问字典中该键对应的值
使用dict[key]方法时,若字典中**不存在该键**,程序会抛出**KeyError异常**。
print(name + ":" + phonebook_dict['李小明'])
为了避免在字典中取数据时出现访问不存在的键值导致的异常,使程序运行意外中止,可以**先判断键是否存在**,或使用异常处理。
修改后的完整实现代码如下:
def query(name):
# 索引方法实现查询功能
if name in phonebook_dict: # 为避免姓名不存在导致异常,先判断是否存在
return name + ":" + phonebook_dict[name] # 以输入的人名为键访问字典中该键对应的值
else:
return "联系人不存在"
if __name__ == '__main__':
# 用字典存储数据的通讯录程序,查询功能
phonebook_dict = {'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
Name = input('请输入要查询的联系人姓名:')
print(query(Name))
除此之外,还可以使用字典的内置方法**get()**来获取数据,其语法为:
dict.get(k[, default])
字典dict中存在以“k”为键的元素时,则返回值该键对应的值。
print( phonebook_dict.get('李明'))
当字典dict中不存在以“k”为键的元素时,如果没有提供 default 参数,则返回空值 None。
print(phonebook_dict.get('李小明'))
当字典dict中不存在以“k”为键的元素时,如果提供了 default 参数,则返回default。
print(phonebook_dict.get('李小明', '联系人不存在'))
建议在获取字典值时,尽可能使用**字典的get()方法**,可以避免键不存在时引发的错误。
用get()方法修改后的完整代码如下:
def query(name):
# get()方法实现查询功能
return name + ":" + phonebook_dict.get(name, '联系人不存在')
if __name__ == '__main__':
# 用字典存储数据的通讯录程序,查询功能
phonebook_dict = {'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
Name = input('请输入要查询的联系人姓名:')
print(query(Name))
根据年月查询该月天数¶
def leap(year: int) -> bool:
"""接收一个表示年份的整数,判定是否是闰年,返回布尔值 """
return year % 400 == 0 or (year % 4 == 0 and year % 100 != 0)
def days_of_month(month: int, year: int) -> int:
"""接收一个表示月份的整数,返回该月的天数"""
days_of_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
days_dic = dict(zip(range(1, 13), days_of_month)) # 构建每月天数字典
days = days_dic.get(month) # 查询本月天数
if leap(year) and month == 2:
days = days + 1 # 若为闰年2月,该月为29天
return days
if __name__ == '__main__':
today = input() # 输入8位的年月日
year = int(today[:4])
month = int(today[4:6])
print(days_of_month(month, year))
字典提供了内置方法**keys()**、**values()**和**items()**可以获取字典中所有的**“键”**、**“值”**和**“键-值”对**的视图。
返回值是一个**可迭代对象**,其中的**数据顺序确定**,数据顺序与加入顺序相同。
获取视图方法的描述如下表所示。
| 方法 | 描述 |
|---|---|
| dict.keys() | 获取字典dict中的所有键组成一个可迭代数据对象。 |
| dict.values() | 获取字典dict中的所有值组成一个可迭代数据对象。 |
| dict.items() | 获取字典dict中的所有键值对,两两组成元组,形成一个可迭代数据对象。 |
phonebook_dict = {'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
# 返回可迭代对象,dict_keys(['李明', '张宏', '吕京'])
keys = phonebook_dict.keys()
# 返回可迭代对象,dict_values(['13988887777', '13866668888', '13143211234'])
values=phonebook_dict.values()
# 返回可迭代对象,dict_items([('李明', '13988887777'), ('张宏', '13866668888'), ('吕京', '13143211234')])
key_value_pairs=phonebook_dict.items()
print(keys)
print(values)
print(key_value_pairs)

上述3种方法返回值是**可迭代数据对象**,可对其进行**遍历**或用**list()将其转为列表**。
phonebook_dict = {'李明': '13988887777', '张宏': '13866668888', '吕京': '13143211234'}
keys = list(phonebook_dict.keys())
print(keys)
for name in keys: #对可迭代对象dict_keys()进行遍历输出
print(name)
for name,phone in phonebook_dict.items(): #对可迭代对象dict.items()进行遍历输出
print(name+':'+phone)
在 Python 3.7 版以后,字典顺序会确保为插入顺序,所以这3个方法的返回值也都是有序数据,可以使用sorted()等应用于序列的方法对其进行操作。 但向.往中烈面添元素新键可能导致,使导致散列表中的键的次序发生。化.,此,不要在遍历字典的同时对进行典的。改.
city = {'北京': 1961, '重庆': 2885, '成都': 1405, '上海': 2302}
city_name = list(city.keys()) # ['重庆', '上海', '北京', '成都']
total_population = sum(city.values()) # 可迭代对象可以直接做sum()的参数
print(f'城市列表:{city_name}') # 城市列表:['重庆','上海','北京','成都']
print(f'城市人口{total_population}万人') # 城市人口8553万人
print(sorted(city.values())) # 排序输出[1405, 1961, 2302, 2885]
print(sorted(city.items(), key=lambda x:x[1])) # 排序输出[('成都', 1405), ('北京', 1961), ('上海', 2302), ('重庆', 2885)]