字典结构
字典的介绍— “再来一万次,我也愿意伸手去捧水中碎月”
字典是通过键和值的组合来存储数据的数据结构,其使用方式便捷,应用非常广泛。
字典的特点是 可变、无序、可嵌套 ,它通过 键(key)和 值(value)的对应关系来存储和组织数据,通过唯一的键就可以找到对应的值。
想象一下,图书馆中有很多书籍,每本书都有一个独特的编号。你可以使用这些编号来查找和获取你需要的书籍。在这里,图书馆就相当于字典,图书的编号就相当于字典的键,而书籍就相当于字典的值。
在 Python 中,字典可以理解为是数学中的一种映射关系,通过 一个元素(键),可以找到 唯一 的另一个元素(值)。
在 Python 中,字典的每个键值对用冒号分割,每个键值对之间用逗号分割,整个字典包括在花括号 { } 中 , 字典的写法和结构如下:
在 Python 中的字典相当于 java 和 C++ 中的 map 对象。
来看一个例子方便理解:
# 定义一个变量,关于一个人的各种特征
'名称'
: '牧旗教程'
, '年龄'
: 27
, '是否结婚'
: False
}在上面的例子里,我定义了一个关于某人的变量,这个人的姓名是 牧旗教程 ,年龄是 27,是否结婚是 False ,我使用字典将这些数据收纳了起来,赋予给了这个人。这样我们就完成了一个字典的定义。
除了上面直接创建字典的方式外,还可以使用 dict 内置函数直接创建,这种创建方式有以下两种写法:
# 方式一
dict
(key1 = value1 , key2 = value2 ,key3 = value3 , ······)# 方式二
dict
([(key1 , value1) , (key2 , value2) , (key3 , value3) , ······])更多创建方式可以见该小结最下面的附加内容。
另外,在 Python 中,字典具备以下特点:
名称 | 描述 |
---|---|
键值唯一性 | 同一个字典中不可能出现一个键位出现多次的情况。 |
无序性 | 字典是任何数据类型的无序集合,可以随意排列。 |
可变性 | 字典是可变的,可以添加、删除或修改其中的元素。 |
可嵌套性 | 字典可以深度嵌套,值可以是任何类型数据,包括字典本身。 |
字典的操作
Python 中的字典可以访问数据、新增删除或修改内容,其操作方式主要分为以下几种:
名称 | 描述 |
---|---|
字典的访问 | 通过调用键位或者使用 get 函数,我们可以快速获取字典里对应的值。 |
修改字典元素 | 可以通过指定键位来修改对应键位的值。 |
字典新增元素 | 可以通过直接赋值或者使用 update 函数来对字典新增元素。 |
字典删除元素 | 可以通过 del 方法或者 pop 函数来删除对应键值对。 |
下面让我们结合案例来对上面的操作进行逐一讲解:
-
字典的访问
① 通过键位访问
我们创建字典的目的是为了存储数据,方便在后续进行数据的访问,在 Python 中访问字典元素的方式是使用中括号和指定键位名称进行提取,来看个例子:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 选择变量中的键
my_value = person['年龄'
]# 输出结果
print
(my_value)结果如下:
27
② 使用 get 函数访问
get 函数的写法是 my_dict.get(key, default_value) ,其中 key 是要获取值的键,default_value 表示当键不存在时返回的默认值,不会产生报错,这个参数可以省略。
# 使用 get 函数提取元素 第二个参数可以省略
my_value2 = person.get('名称'
)# 输出结果
print
(my_value2)运行代码,结果如下:
牧旗教程
使用 get 函数时可以传入第二个参数,如果要找的键不存在,程序不会报错而是返回我们输入的参数,来看个例子:
# 使用 get 函数提取元素 第二个参数可以省略
my_value3 = person.get('身高'
,'没找到这个键'
)# 输出结果
print
(my_value3)运行代码,结果如下,可以看出,如果没找到 身高 这个键的时候会输出默认值:
没找到这个键
-
修改字典元素
可以通过指定键位来修改字典中对应键位中的值,来看个例子:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 选择变量中的键并修改其的值
person['名称'
] ='其他教程'
person['年龄'
] =30
person['是否结婚'
] =True
# 输出结果
print
(person)结果如下,可以看到,原字典 person 中的内容全部进行了修改。
{'名称': '其他教程', '年龄': 30, '是否结婚': True}
-
字典新增键和值
在 Python 中可以使用赋值方法新增或者使用 update 函数来更新:
① 直接赋值方式新增
只要使用原字典中没有的键位为字典进行赋值就可以新增元素,来看个例子:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 直接赋值新增键值对
person['身高'
] =180
# 输出结果
print
(person)运行代码,结果如下,可以看出原来的 person 字典中新增了 身高 这一个键和值。
{'名称': '牧旗教程', '年龄': 27, '是否结婚': False, '身高': 180}
② 使用 update 函数新增
使用 update 函数适用于需要一次性添加多个键值对的情况,来看个例子:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 使用 update 函数新增键值对,要注意传入的也是一个字典
person.update({'体重'
:70
,'爱好'
:'游泳'
})# 输出结果
print
(person)运行上面代码,结果如下,此时原来的 person 变量新增了一组字典:
{'名称': '牧旗教程', '年龄': 27, '是否结婚': False, '体重': 70, '爱好': '游泳'}
-
字典删除元素
在 Python 中可以使用 def 关键字或者 pop 函数来完成字典元素删除的操作:
① del 关键词删除元素
使用 del 关键词可以将字典中想要删除的键值直接删除,来看一个例子:
# 创建一个字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 直接使用 del 删除关键词
del
person['是否结婚'
]# 输出结果
print
(person)运行代码,结果如下,可以看出原来的 person 变量中的 是否结婚 键和值都被删除:
{'名称': '牧旗教程', '年龄': 27}
另外,要注意的是,如果 del 关键词后面直接接字典变量,则代表清空这个变量。
② pop 函数删除元素
使用 pop 函数可以删除字典里的元素。第一个参数是删除的键名,第二个参数代表键不存在时输出的内容,和 get 函数类似。要注意的是,使用 pop 函数删除后会返回一个值,这个值代表被删除的键对应的值。来看个例子:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 使用 pop 函数删除键值对,不传入第二个参数,并将结果输出给 my_value 变量
my_value = person.pop('年龄'
)# 输出结果
print
(my_value)print
(person)运行代码,结果如下,可以看出, 这个函数返回的值 my_value 是删除的键对应的值,原字典中的对应的键位直接被删除掉了。
27
{'名称': '牧旗教程', '是否结婚': False}让我们再来看一个新的例子,这次我将传入 pop 函数的第二个参数:
# 创建字典
person = {'名称'
:'牧旗教程'
,'年龄'
:27
,'是否结婚'
:False
}# 这次传入了两个参数,第二个参数是如果字典中没有第一个参数对应的字段时返回的结果。
my_value = person.pop('身高'
,'没有这个字段'
)# 输出结果
print
(my_value)print
(person)运行代码,结果如下,由于原来的字典 my_dict 中没有 身高 这个键,所以函数输出的结果是我们传入的第二个参数 没有这个字段。
{'名称': '牧旗教程', '年龄': 27, '是否结婚': False}
字典相关函数
Python 中有很多函数或者方法与字典相关,可以用来查询或者操作字典:
函数 | 描述 |
---|---|
keys 方法 | 使用 keys 方法可以返回字典里所有键的可迭代对象。 |
values 方法 | 使用 values 方法可以返回字典里所有值的可迭代对象。 |
items 方法 | 使用 items 方法可以返回字典所有键和值对象,形成一个元组列表。 |
len 函数 | 使用 len 函数可以计算字典里的元素数量。 |
下面让我们结合案例来对上面的函数进行逐一讲解:
-
keys 方法
要注意,用这种方式返回的键是一个可迭代对象,需要用 list 函数或者其他数据结构函数进行转化才可以调用。
# 创建一个字典
my_dict = {'语言'
:'Python'
,'版本'
:'3.9'
,'主题'
:'dark'
}# 将字典的所有键赋予一个新的变量,并转化为列表结构
my_keys =list
(my_dict.keys())# 输出结果
print
(my_keys)运行上面代码,结果如下:
['语言', '版本', '主题']
可见,字典中的所有键都被转化到了一起,使用 list 函数转化后呈现。
-
values 方法
和 keys 函数一样 ,用这种方式返回的键是一个可迭代对象,需要用 list 函数或者其他数据结构函数进行转化才可以调用。
# 创建一个字典
my_dict = {'语言'
:'Python'
,'版本'
:'3.9'
,'主题'
:'dark'
}# 将字典的所有键赋予一个新的变量,并转化为列表结构
my_values =list
(my_dict.values())# 输出结果
print
(my_values)运行上面的代码,输入结果如下:
['Python', '3.9', 'dark']
可见,字典中的所有的值都被转化到了一起,使用 list 函数转化后呈现。
-
items 方法
items 方法返回一个可迭代对象,其中包含了字典的所有键值对。每个键值对是以元组的形式表示。
# 创建一个字典
my_dict = {'语言'
:'Python'
,'版本'
:'3.9'
,'主题'
:'dark'
}# 将字典的所有键赋予一个新的变量,并转化为列表结构
my_items =list
(my_dict.items())# 输出结果
print
(my_items)运行上面的代码,结果如下:
[('语言', 'Python'), ('版本', '3.9'), ('主题', 'dark')]
这样就可以使用 list 列表和元组的性质访问字典中的元素了。
同样也可以使用 for 循环遍历的方式提取到字典中的全部值:
for
key , valuein
my_dict.items():print
(key , value)运行代码,结果如下:
语言 Python
版本 3.9
主题 dark关于 for 循环的知识将在后面教程中有详细介绍。
-
len 函数
# 创建一个字典
my_dict = {'语言'
:'Python'
,'版本'
:'3.9'
,'主题'
:'dark'
}# 选择变量中的键并修改其的值
my_result =len
(my_dict)# 输出结果
print
(my_result)运行代码,结果如下:
3
可以看到,原字典内部有三个键值对,也就是有三个元素。
字典进阶内容
-
使用 fromkeys 方法创建字典
使用 fromkeys 方法可以用来创建带有默认值的字典,用这个方法创建具有相同值的字典,需要传入一个键的列表,来看一个例子方便理解:
# 先定义一个键的列表
sports = ['足球'
,'排球'
,'篮球'
]# 使用一个通用的默认值来创建字典
result = dict.fromkeys(sports ,10
)# 输出结果
print
(result)运行代码,结果如下:
{'足球': 10, '排球': 10, '篮球': 10}
可以看出,创建的字典的键是我们传入的列表,所有键对应的值都是我们传入的第二个参数。
-
嵌套字典
字典可以嵌套在另一个字典中,形成多层结构,以实现更复杂的数据组织。在一些网页中进行数据传输非常常见。
嵌套字典可以扩大数据存储的整洁性,可以一层一层地检索想要的数据。
# 创建一个嵌套列表
students = {'name'
:'Jack'
,'age'
:18
,'grades'
: {'Math'
:90
,'English'
:92
,'History'
:95
}}# 假如我想知道 Jack 的数据成绩,那么需要安装层级去寻找数据
math_score = students['grades'
]['Math'
]# 输出结果
print
(math_score)结果如下:
90
上面的例子中我们创建了一个嵌套字典,在最外层我们定义了 name 和 age 和 grades 三个键 ,在创建 grades 键时,我们对结果又传入了一个新的字典,来表示他的每个科目的成绩。
-
字典推导式
字典推导式也是一种创建字典的方法,和列表推导式类似,都是为了减少代码量而设计的简洁创建数据结构的操作。
字典的推导式的语法结构如下:
{ key表达式 : value表达式for
itemin
iterablecondition
}表达式的 for 前面的部分是生成结果的样式,可以根据需求进行自定义。
来看一个案例帮助大家更好的理解:
# 创建一个基础字典
my_dict = {'a'
:1
,'b'
:2
,'c'
:3
,'d'
:4
,'e'
:5
}# 使用列表推导式选择原字典中,值大于 3 的元素形成一个新字典
dict1 = {key : valuefor
key , valuein
my_dict.items()if
value >3
}# 使用列表推导式将原字典中的所有值变为原来的三倍
dict2 = {key : value * 3for
key , valuein
my_dict.items()}# 使用列表推导式交换原字典中的键和值
dict3 = {value : keyfor
key , valuein
my_dict.items()}# 输出结果
print
(dict1)print
(dict2)print
(dict3)结果如下:
{'d': 4, 'e': 5}
{'a': 3, 'b': 6, 'c': 9, 'd': 12, 'e': 15}
{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
关注公众号【牧旗教程】,回复“更多例题”,获取更多题型进行训练~
您的打赏将帮助维护网站服务器的正常运营,并为作者的后续更新提供更多的动力。
Copyright © 2013-2023 Muqi Course. All Rights Reserved. 牧旗教程 版权所有 京ICP备2023029281号