数据容器
在Python中,数据容器是指能够存储多个数据项(可以是不同类型的数据)的数据结构。Python提供了多种内置的数据容器类型,每种类型都有其特定的用途和特性。Python中最常用的数据容器有:List列表、Tuple元组、Dictionary字典、Set集合。
本篇我们来介绍Dictionary字典与Set集合。
Dictionary字典
dict
(字典)是Python中一个非常强大且常用的数据结构,它用于存储键值对(key-value pairs)。字典中的每个元素都是一个键值对,键(key)必须是唯一的,而值(value)则可以是任何数据类型,包括另一个字典。
字典是无序的,但是可变。
表示形式
字典的创建使用大括号 {} 包含键值对,并用冒号 : 分隔键和值,形成 键:值 对。如:
dict_a = {1: 2, 2: 3, True: False, "a": "b", (1, 2): [3, 4]}
注意:
dict字典中,键必须是唯一的,但值可以重复。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字,元组。
字典方法
获取值
给出以下内容,尝试代码实现:
获取班级上三位同学jone、alice、bob的成绩,三位同学成绩分别为88、99、100。
想一想,在使用字典之前,如果我们想实现上述内容,怎么编写呢?
# 列表形式查成绩
list_name = ["jone","alice","bob"]
list_score = [88,99,100]
print(list_score[list_name.index("jone")])
#找到list_name.index("a")的索引位置,将list_score对应位置进行切片
------------------
输出结果:
88
给定一个名字,要查找对应的成绩,就先要在list_name中找到对应的位置,再从list_score取出对应的成绩,list越长,耗时越长。我们也说过列表是可变的,所以它不稳定。
那么,我们来用字典编写看看:
定义一个dict字典,通过key健可以获取value值。
# 字典形式查成绩
dict_b = {"jone": 88, "alice": 99, "bob": 100}
print(dict_b["jone"])
------------------------------
输出结果:
88
输入健来返回对应的值。
dict字典中有没有更直接的办法得到值呐?好滴!我们引入get()方法,用于安全地获取指定键的值。例用:
dict_a = {1: 2, 2: 3, True: False, "a": "b", (1, 2): [3, 4]}
# get 获取指定key的value 比直接通过key去取值 get相对安全一点
print(dict_a.get("a"))
------------------------------
输出结果:
b
上述后两者都是从字典中获取值的方法,get()方法更好。
pop()弹出
字典中弹出是找到目标健,然后将对应的键值对弹出去。
dict_c = {1: 2, 2: 3, "a": "b", (1, 2): [3, 4]}
print(dict_c.pop(1)) #括号内输入健名
print(dict_c)
set集合
set
集合是 Python 中的一个内置数据类型,用于存储不重复的元素。它是一个无序的集合,这意味着集合中的元素没有固定的顺序,且不支持通过索引进行访问。set
集合主要用于进行数学上的集合运算,如并集、交集、差集等。
set集合是set和dict类似,也是一组key的集合,但不存储value,由于key不能重复,所以,在set中,没有重复的key。可以用来去重。集合是无序的。
表示形式
可以使用大括号 {}
或者是set()方法来创建集合:
set_a = {1, 2, 3, 4, 5, 5, 6, 6, 7, 1}
但是我们表示字典时用的也是大括号,所以我们在创建空集合时,必须使用set()方法创建。创建空集合:
# 定义一个空集合
# set_c = {} 这个是字典
set_f = {}
print(set_f,type(set_f)) #查看类型
set_c = set([])
print(set_c, type(set_c))
--------------------------------
输出结果:
{} <class 'dict'>
set() <class 'set'>
set特点
去重
我们了解到,set集合也是一组key的集合,但不存储value,由于key不能重复,所以,在set中,没有重复的key。故此,当我们创建一个有重复key的集合时:
set_a = {1,3,4,1,4,2,3,7,6,8,7}
我们来将它输出看看:
print(set_a)
-------------------
输出结果:
{1, 2, 3, 4, 6, 7, 8}
发现,集合中重复的元素只保留了一个,多余的被去除了,故此set集合可以去重。
set方法
set
集合主要用于进行数学上的集合运算,如并集、交集、差集和对称差集等。那么set集合应当有许多使用方法,我们来了解一下吧。
添加
add()方法
往集合中添加元素:
set_a = {1,3,4,1,4,2,3,7,6,8,7}
set_a.add(22)
print(set_a)
--------------------
输出结果:
{1, 2, 3, 4, 6, 7, 8, 22} #自动去重
删除
pop()弹出
我们在list列表的中提过pop弹出方法,当pop()中输入空字符时,list列表将列表最后一位元素弹出,set集合中也是如此嘛?试试看:
set_a = {1,3,4,1,4,2,3,7,6,8,7}
set_a.pop()
print(set_a)
---------------------
输出结果:
{2, 3, 4, 6, 7, 8}
我们发现在集合中pop()方法输入空字符时,将集合中第一个元素弹出了。因为集合是无序的,所以pop方法会随机弹出一个元素。
remove()与discard()方法
remove()与discard()方法的使用方法相同,但是remove()在删除不存在的会报错,discard()删除不存在的不会报错。
set_b = {1,2,4,7,8,13,21,33}
print(set_b.discard(29))
print(set_b.remove(29))
-----------------------------
输出结果:
print(set_b.remove(29))
KeyError: 29
None #discard输出None
集合运算
两个集合之间的运算
intersection()交集
set_b = {1,2,4,7,8,13,21,33}
set_c = {4,7,9,12,13,25}
# intersection 交集
print(set_b.intersection(set_c))
--------------------------
输出结果:
{4, 13, 7}
intersection()交集括号内输入想要进行集合运算的目标集合。
union并集
set_b = {1,2,4,7,8,13,21,33}
set_c = {4,7,9,12,13,25}
# 并集union
print(set_b.union(set_c))
--------------------------
输出结果:
{1, 2, 33, 4, 7, 8, 9, 12, 13, 21, 25}
与intersection()交集一样,union并集括号内输入想要进行集合运算的目标集合。
difference()差集
在difference()差集中,括号内输入想要做差集的目标集合。假设有集合b和集合c,格式:
集合b.difference(集合c)
#可以理解为"b-c",即集合b删去与集合a中同样的元素
比如:
set_b = {1,2,4,7,8,13,21,33}
set_c = {4,7,9,12,13,25}
# difference 差集
print(set_b.difference(set_c)) #b中去除与c中相同的元素
print(set_c.difference(set_b)) #c中去除与b中相同的元素
--------------------------
输出结果:
{1, 2, 33, 8, 21}
{9, 12, 25}
总结
Dictionary字典:
- 字典的创建使用大括号 {} 包含键值对,并用冒号 : 分隔键和值,形成 键:值 对。
- dict字典中,键必须是唯一的,但值可以重复。
- 值可以取任何数据类型,但键必须是不可变的,如字符串,数字,元组。字典时无序但可变的。
本篇介绍了字典通过健获取值和弹出字典元素的方法。
set集合:
- 可以使用大括号
{}
或者是set()方法来创建集合。注:空集合一点要用set()方法来创建。 - set内的元素都是健,健是不能重复的,所以set集合有自动去重的特点。
- set集合可以通过方法进行添加、删除和集合运算(交集,并集,差集)。