数据容器——字典(dict)

什么是字典?

字典(Dictionary)是一种非常强大的数据结构,它以键值对的形式存储数据,类似于现实生活中我们使用的索引式字典,其中每个单词都有对应的释义。
在Python中,字典的键是唯一的,而值可以重复。允许我们通过键快速访问对应的值,而无需遍历整个集合,这在处理大量数据时非常高效。

字典的主要特点包括:
• 无序性:字典中的元素是无序的,不能像列表那样通过索引来访问。
• 动态性:字典的大小可以随时改变,可以添加、删除或修改元素。
• 键的唯一性:键必须是不可变类型,如字符串、数字或元组,且在同一个字典内必须唯一。
• 高效查找:由于字典内部使用哈希表实现,查找速度通常很快,时间复杂度为O(1)。

1、创建字典

# 1.1 创建一个空字典非常简单,只需使用大括号{}即可。
empty_dict = {}
empty_dict1 =dict()
print(empty_dict)   # {}
print(empty_dict1)   # {}
# 1.2 使用字面量创建字典
# 通过键值对的方式,我们可以一次性创建包含多个元素的字典。
'''
{key:value,key:value,key:value}
my_dict={key:value,key:value,key:value}'''

2、访问字典元素

# 2.1通过键(key)获取值,使用键来访问字典中的值,(key)必须是唯一的,和下标索引很像,使用[]。
score={"a":77,"b":100,"c":96,"d":89}
print(score["a"])  # key值为a,对应的value值为:77
print(type(score))  # <class 'dict'>
# 2.2访问键不存在时的处理,尝试访问不存在的键会引发KeyError。为了避免这种情况,可以使用get()方法。
score={"a":77,"b":100,"c":96,"d":89}
# print(score['f'])  # KeyError: 'f'
print(score.get('f'))  # 输出:None
print(score.get('f','Not found'))  # 输出:Not found
print(score.get('a','Not found'))  # 输出:77
# 2.3 keys(),values(),访问字典的全部键和值
keys=score.keys()
print(keys)  # dict_keys(['a', 'b', 'c', 'd'])
print(score.values())  # 访问value值,输出:dict_values([77, 100, 96, 89])

3、修改字典

# 3·1添加新键值对,可以通过赋值操作添加新的键值对。
# 语法:字典[key]=Value
score["e"]=68
print(score)    # {'a': 77, 'b': 100, 'c': 96, 'd': 89, 'e': 68}
# 3·2更新元素,字典被修改,元素被更新
# 语法:字典[key]=Value,因为字典key不可以重复,所以对已经存在的key执行更新,就是更新Value值
score1={"a":77,"b":100,"a":96,"d":89}
print(score1)  # {'a': 96, 'b': 100, 'd': 89}


4、删除字典元素

# 4·1 pop()方法:删除指定键的键值对并返回其值。如果键不存在,可以提供一个默认值。
score_1={"a":77,"b":100,"c":96,"张三":89}
del_score=score_1.pop("b")
print(f"删除\"b\"后,字典{score_1},输出的结果为{del_score}")  # 删除"b"后,字典{'a': 77, 'c': 96, 'd': 89},输出的结果为100
# 4.2  del关键字:使用del关键字可以删除整个键值对。
del score_1['张三']
print(score_1) # {'a': 77, 'c': 96}
# 4.3 clear()方法:删除字典中的所有元素,输出;空字典
score_1.clear()
print(score_1)  # {}

5、遍历字典

# 5.1 遍历键:for key in 字典.keys()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for key in stu_score.keys():
    print(key)
'''
小明
小兰
小红
小白
我们在这里发现,输出的value与key对应,似乎是有序的,与前面的无序性特点不一致,这是因为:在python中,从版本3.7开始,
所有的字典都是有序的,无序特意指定有序字典,意味着它们会保持元素被插入时的顺序。这一变化使得每个字典在用途上可以被看作是有序字典。
'''
# 5·2 遍历值:for value in 字典.values()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for value in stu_score.values():
    print(value)
'''
10
20
30
40
'''
# 5.3 遍历键值对:for key,value in 字典.items()
stu_score={"小明":10,"小兰":20,"小红":30,"小白":40}
for key,value in stu_score.items():
    print(f'{key}: {value}')
'''
小明: 10
小兰: 20
小红: 30
小白: 40
'''

6、字典的嵌套

#字典的值可以是任何类型的数据,包括另一个字典,这就是所谓的嵌套字典。
6.1创建嵌套字典:让我们创建一个包含学生信息的嵌套字典。每个学生有姓名、年龄和课程成绩等信息:
students = {
    'Alice': {'age': 20, 'grades': {'math': 90, 'science': 85, 'history': 88}},
    'Bob': {'age': 21, 'grades': {'math': 78, 'science': 92, 'history': 80}},
    'Charlie': {'age': 19, 'grades': {'math': 85, 'science': 79, 'history': 91}}
}

6.2 访问和更新嵌套字典元素
# 访问学生信息:我们可以通过多层索引来访问和更新嵌套字典中的元素
print(students['Alice']['age'])  # 输出:20
print(students['Bob']['grades']['science'])  # 输出:92

# 更新学生信息
students['Alice']['age'] = 21
students['Bob']['grades']['history'] = 85

# 添加新学生信息:添加新元素和遍历嵌套字典,只需为字典添加新的键值对,而遍历嵌套字典则可以使用嵌套的循环结构:
##添加新学生
students['David'] = {'age': 22, 'grades': {'math': 95, 'science': 88, 'history': 84}}

6.3 遍历字典
for name, value in students.items():
    print(f"Name: {name}")
    print(f"Age: {value['age']}")
    print("Grades:")
    for subject, grade in value['grades'].items():
        print(f"{subject}: {grade}")
    print()

'''
Name: Alice
Age: 21
Grades:
math: 90
science: 85
history: 88

Name: Bob
Age: 21
Grades:
math: 78
science: 92
history: 85

Name: Charlie
Age: 19
Grades:
math: 85
science: 79
history: 91

Name: David
Age: 22
Grades:
math: 95
science: 88
history: 84

7、练习案例

有如下员工信息,使用字典(dict)完成数据的记录。
并通过for循环,对所有级别为1级的员工,级别上升1级,薪水增加1000元
姓名    部门       工资     级别
张三    科技部     3000     1
王五    市场部     6000     2
李杰    市场部     9000     3
刘明    科技部     5000     1
梁辉    市场部     7000     2
staff={"张三":{"部门":"科技部","工资":3000,"级别":1},
       "王五":{"部门":"市场部","工资":6000,"级别":2},
       "李杰":{"部门":"市场部","工资":9000,"级别":3},
       "刘明":{"部门":"科技部","工资":5000,"级别":1},
       "梁辉":{"部门":"市场部","工资":7000,"级别":2}}
print("全体员工当前信息如下:")
print(staff)
print("全体员工级别为1的员工完成升职加薪操作后,信息表更新如下:")
for key in staff:
    if staff[key]["级别"]==1:
        staff[key]["级别"]+=1
        staff[key]["工资"]+=1000
print(staff)

'''
运行结果:
全体员工当前信息如下:
{'张三': {'部门': '科技部', '工资': 3000, '级别': 1}, '王五': {'部门': '市场部', '工资': 6000, '级别': 2}, '李杰': {'部门': '市场部', '工资': 9000, '级别': 3}, '刘明': {'部门': '科技部', '工资': 5000, '级别': 1}, '梁辉': {'部门': '市场部', '工资': 7000, '级别': 2}}
全体员工级别为1的员工完成升职加薪操作后,信息表更新如下:
{'张三': {'部门': '科技部', '工资': 4000, '级别': 2}, '王五': {'部门': '市场部', '工资': 6000, '级别': 2}, '李杰': {'部门': '市场部', '工资': 9000, '级别': 3}, '刘明': {'部门': '科技部', '工资': 6000, '级别': 2}, '梁辉': {'部门': '市场部', '工资': 7000, '级别': 2}}

进程已结束,退出代码为 0
'''

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值