Python数据容器(2)--字典与集合

数据容器

在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字典:

  1. 字典的创建使用大括号 {} 包含键值对,并用冒号 : 分隔键和值,形成 键:值 对。
  2.  dict字典中,键必须是唯一的,但值可以重复。
  3. 值可以取任何数据类型,但键必须是不可变的,如字符串,数字,元组。字典时无序但可变的。

        本篇介绍了字典通过健获取值和弹出字典元素的方法。

set集合:

  1. 可以使用大括号 {} 或者是set()方法来创建集合。注:空集合一点要用set()方法来创建。
  2. set内的元素都是健,健是不能重复的,所以set集合有自动去重的特点。
  3. set集合可以通过方法进行添加、删除和集合运算(交集,并集,差集)。
  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值