# 字典
# 1、字典的使用
# 1.1 字典的定义
# 在python中,字典是一系列键-值对。每个键与每一个值都相关联,可以使用键来访问与之关联的值
# 与键相关联的值可以是数字、字符串、列表及字典,和JSON的结构非常类似
# 键和值之间用冒号分隔,而键-值对之间用逗号分隔。字典中可以包含任意数量的键值对
user1 = {"name": "张三", "age": 16, "sex": "男"};
# 1.2 访问字典中的值
# 要获取与键相关联的值,可依次指定字典名和放在方括号中的键
user2 = {"name": "张三", "age": 16, "sex": "男"};
print("用户名:" + user2["name"]);
# 1.3 添加键-值对
# 要添加键值对,需依次指定字典名、用方括号括起来的键和相关联的值
# 键值对的排列顺序和添加顺序不同,python不关心键值对的添加顺序,只关心键和值之间的关联关系
user3 = {"name": "张三", "age": 16, "sex": "男"};
user3["score"] = 99.5; # 添加一个分数键值对
print(user3);
# 1.4 创建一个空字典
# 可以先使用一对空的花括号定义一个字典,再添加各个键值对
# 使用字典来存储用户提供的数据,通常都需要先定义一个空字典
user4 = {};
user4["name"] = "张三";
user4["age"] = 16;
print(user4);
# 1.5 修改字典中的值
# 要修改字典中的值,可依次指定字典名、用方括号括起的键以及与该键相关联的新值。
user5 = {"name": "张三", "age": 16, "sex": "男"};
print("修改前:")
print(user5);
user5["name"] = "李四"; # 修改名字为李四
print("修改后:");
print(user5);
# 1.6 删除键值对
# 对于字典中不再需要的信息,可使用 del 语句将相应的键 — 值对彻底删除。
# 使用 del 语句时,必须指定字典名和要删除的键。
# 删除的键值对永远消失了
user6 = {"name": "张三", "age": 16, "sex": "男"};
del user6["age"]; # 删除sex键及其对应的值
print(user6);
# 2、遍历字典
# 2.1 遍历所有的键-值对
# 用于遍历字典的for循环,可声明两个变量,用于存储键-值对中的键和值,这两个变量可使用任意名称
# items()返回一个键值对列表
# 遍历字典时,键-值对的返回顺序与存储顺序不同
user7 = {"name": "张三", "age": 16, "sex": "男"};
for k, v in user7.items():
print("key:" + k + "\t\tvalue:" + str(v));
# 2.2 遍历字典中的所有键
# 在不需要使用字典中的值时,可以使用keys()方法获取键
# 遍历字典时,会默认遍历所有键。方法keys()返回一个包含字典中所有键的列表
user8 = {"name": "张三", "age": 16, "sex": "男"};
for k8 in user8.keys():
print(k8); # 打印字典中所有的键
# 2.3 按顺序遍历字典中的所有键
# 字典总是明确地记录键和值之间的关联关系,但获取字典的元素时,获取顺序是不可预测的。
# 要以特定的顺序返回元素,可以在for循环中对返回的键进行排序
user9 = {"name": "张三", "age": 16, "sex": "男"};
for k9 in sorted(user9):
print(k9); # 按照字母顺序打印字典中的所有键
# 2.4 遍历字典中的所有值
# 如果要遍历字典中的所有值,可以使用方法values(),它将返回一个值列表,不包含任何键
user10 = {"name": "张三", "age": 16, "sex": "男"};
for v10 in user10.values():
print(str(v10)); # 打印字典中的所有值
# 2.5 剔除重复项
# 如果列表中包含大量重复项,那么如果要剔除重复项,可以使用集合(set),集合类似于列表,但是每一个元素都是惟一的。
user11 = {"name": "张三", "age": 16, "sex": "男", "friend": "张三"};
for v11 in set(user1.values()):
print(str(v11)); # 打印唯一值
# 3、嵌套
# 将一系列字典存储在列表中或将列表作为值存储在字典中称为嵌套
# 3.1 字典列表
# 将字典存储在列表中
user12 = {"name": "张三", "age": 16, "sex": "男"};
user13 = {"name": "李四", "age": 17, "sex": "女"};
user14 = {"name": "王五", "age": 18, "sex": "男"};
users = [user12, user13, user14]; # 将三个用户字典都存储在列表中
print(users); # 打印列表
# 3.2 在字典中存储列表
# 将列表存储在字典中
# 每当需要在字典中将一个键关联到多个值时,都可以在字典中嵌套一个列表。
user15 = {"name": "张三", "age": 16, "sex": "男", "score": [66, 77, 88]}; # 其中列表中分别为语数外三科的成绩
for u15 in user15["score"]:
print(u15);
# 3.3 在字典中存储字典
# 在字典中嵌套字典
users2 = {"first_user": {"name": "张三", "age": 16, "sex": "男"}, "second_user": {"name": "李四", "age": 17, "sex": "女"}};
for us2 in users2.keys():
print("用户:");
for vs2, ks2 in users2[us2].items():
print(vs2 + "->" + str(ks2));