Chapter 13 Python数据容器:字典

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!


前言

在 Python 中,数据容器是组织和管理数据的重要工具,字典作为其中一种基本的数据结构,具有独特的特性和广泛的应用。本章详细介绍了字典的定义、常用操作以及遍历方法。


本篇文章参考:黑马程序员

一、字典的定义

Python中字典和生活中字典十分相像:

  • 生活中的字典可以按【字】找出对应的【含义】
  • Python中的字典:可以按【Key】找出对应的【Value】

①基本语法:
字典使用花括号“{}”,且使用逗号隔开各个元素,存储的元素是一个个键值对,每一个键值对包含Key和Value(用冒号分隔),键值对之间使用逗号分隔。

  • 定义字面量:
    {key:value,key:value,key:value,……,key:value}
  • 定义变量:
    变量名称 = {key:value,key:value,key:value,……,key:value}
  • 定义空字典:
    方式一:变量名称 = {}
    方式二:变量名称 = dict()

②特点:

  • 可容纳多个数据
  • 每一份数据是key:value键值对
  • Key和Value可以是任意类型的数据(key不可为字典)
  • Key不可重复,重复会对原有数据覆盖
  • 可修改(增加、删除或更新元素等)
  • 支持for循环,不支持while循环
  • 不可以使用下标索引
# 定义字典
my_dict1={"小明":90,"小美":95,"小空":89,"小散":79}

# 定义空字典
my_dict2={}
my_dict3=dict()
print(f"字典1的内容为{my_dict1},类型为{type(my_dict1)}")
print(f"字典2的内容为{my_dict2},类型为{type(my_dict2)}")
print(f"字典3的内容为{my_dict3},类型为{type(my_dict3)}")

输出结果:
字典1的内容为{‘小明’: 90, ‘小美’: 95, ‘小空’: 89, ‘小散’: 79},类型为<class ‘dict’>
字典2的内容为{},类型为<class ‘dict’>
字典3的内容为{},类型为<class ‘dict’>

# Key不可重复,重复会对原有数据覆盖
my_dict={"小明":90,"小明":79,"小美":95,"小空":89}
print(f"重复key的字典的内容为{my_dict},类型为{type(my_dict)}")

输出结果:
重复key的字典的内容为{‘小明’: 79, ‘小美’: 95, ‘小空’: 89},类型为<class ‘dict’>

Python的字典是基于哈希表(hash table)实现的。字典中的每个键都通过一个哈希函数计算出一个哈希值,这个哈希值决定了键在内存中的存储位置。由于哈希值的计算和存储顺序不是固定的,因此字典的键是无序的。在Python 3.6及以后的版本中,插入字典的顺序会被保留,但无序的特性仍然是其基本性质,因此字典不支持下标索引,我们通常使用键访问字典中的值

# 从字典中基于key取得value
my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
score=my_dict["小明"]
print(f"小明的考试成绩为{score}")

输出结果:
小明的考试成绩为90

字典的嵌套:

# 字典的嵌套
stu_score_dict={
    "小明":{
        "语文":77,
        "数学":89,
        "英语":65
    },"小美":{
        "语文":89,
        "数学":78,
        "英语":98
    },"小空":{
        "语文":58,
        "数学":97,
        "英语":86
    }
}
print(f"学生成绩信息为{stu_score_dict}")

# 从嵌套的字典中获取数据
score=stu_score_dict["小明"]["语文"]
print(f"小明的语文成绩为{score}")

输出结果:
学生成绩信息为{‘小明’: {‘语文’: 77, ‘数学’: 89, ‘英语’: 65}, ‘小美’: {‘语文’: 89, ‘数学’: 78, ‘英语’: 98}, ‘小空’: {‘语文’: 58, ‘数学’: 97, ‘英语’: 86}}
小明的语文成绩为77

二、字典的常用操作(方法)

字典的常用方法:
在这里插入图片描述
①添加元素:
语法:字典[Key] = Value

# 添加新元素
my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
my_dict["小离"]=100
print(f"字典新增元素后,结果为{my_dict}")

输出结果:
字典新增元素后,结果为{‘小明’: 90, ‘小美’: 95, ‘小空’: 89, ‘小散’: 79, ‘小离’: 100}

②更新元素:
语法:字典[Key] = Value

# 更新元素
my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
my_dict["小明"]=33
print(f"字典更新元素后,结果为{my_dict}")

输出结果:
字典更新元素后,结果为{‘小明’: 33, ‘小美’: 95, ‘小空’: 89, ‘小散’: 79}

③删除元素:
语法:字典.pop(Key)

#删除元素
my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
score=my_dict.pop("小明")
print(f"字典删除一个元素后,结果为{my_dict},小明的成绩为{score}")

输出结果:
字典删除一个元素后,结果为{‘小美’: 95, ‘小空’: 89, ‘小散’: 79},小明的成绩为90

使用 pop() 方法删除字典中的元素时,它会返回被删除的值。

④清空字典:
语法:字典.clear()

my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
my_dict.clear()
print(f"字典被清空后,结果为{my_dict}")

输出结果:
字典被清空后,结果为{}

⑤获取字典中全部的key:
语法:字典.keys()

my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
keys=my_dict.keys()
print(f"字典的全部key为{keys}")

输出结果:
字典的全部key为dict_keys([‘小明’, ‘小美’, ‘小空’, ‘小散’])

⑥统计字典内的全部元素(键值对)数量:
统计集合内有多少元素,得到一个整数结果。
语法:len(字典)

my_dict={"小明":90,"小美":95,"小空":89,"小散":79}
num=len(my_dict)
print(f"字典的元素数量:{num}")

输出结果:
字典的元素数量:4

三、字典的遍历

字典不支持下标索引,所以不可使用while循环遍历,但是支持使用for循环遍历。
for循坏遍历:
方式一:
通过获取全部的key来完成遍历
语法:for key in 字典.keys()

# 方式一:通过获取全部的key来完成遍历
for key1 in my_dict.keys():
     print(f"字典的key:{key1}")
     print(f"字典的value:{my_dict[key1]}")

输出结果:
字典的key:小明
字典的value:90
字典的key:小美
字典的value:95
字典的key:小空
字典的value:89

方式二:
直接对字典进行for循坏,每一次循坏都是直接得到key

for key2 in my_dict:
    print(f"字典的key:{key2}")
    print(f"字典的value:{my_dict[key2]}")

输出结果:
字典的key:小明
字典的value:90
字典的key:小美
字典的value:95
字典的key:小空
字典的value:89

相关推荐

  1. Python课堂11——字典

    2024-07-23 09:50:02       52 阅读
  2. Python——字典数据存入excel

    2024-07-23 09:50:02       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 09:50:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 09:50:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 09:50:02       45 阅读
  4. Python语言-面向对象

    2024-07-23 09:50:02       55 阅读

热门阅读

  1. 陌陌聊天数据案例分析

    2024-07-23 09:50:02       14 阅读
  2. [算法题]删除相邻数字的最大分数

    2024-07-23 09:50:02       16 阅读
  3. 后端开发面试题6(附答案)

    2024-07-23 09:50:02       13 阅读
  4. 紫龙游戏服务器面试

    2024-07-23 09:50:02       15 阅读
  5. C#类型基础Part2-对象判等

    2024-07-23 09:50:02       13 阅读
  6. 量化机器人能否提高市场预测精度?

    2024-07-23 09:50:02       17 阅读
  7. ELK Stack入门之部署EFK架构

    2024-07-23 09:50:02       14 阅读
  8. uniapp刷新当前页面bug

    2024-07-23 09:50:02       16 阅读
  9. ArcGIS Pro SDK (九)几何 12 多面体

    2024-07-23 09:50:02       13 阅读