百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

零基础入手!Python中字典与集合的使用指南

liuian 2024-11-28 00:43 55 浏览

全文共5092字,预计学习时长10分钟



本文将介绍Python的内置集合模块,用于支持集合和键值对等数学概念。



什么是集合?


集合是一组用于储存唯一值的序列。

初始化

可使用花括号{}定义集合。

>>> numSet = {1, 2, 3, 4, 5}

>>> print(numSet)

{1, 2, 3, 4, 5}

若在初始化中键入重复值,则只保留一个元素。

>>> numSet = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5}

>>> print(numSet)

{1, 2, 3, 4, 5}

也可使用内置的 set函数进行空集初始化。

>>> emptySet = set()

>>> print(emptySet)

set()

注意:集合元素是不可更改的,在集合中加入可变对象会报错。

>>> tuple1 = (1, 2, 3)

>>> tuple2 = (4, 5, 6)

>>> tupleSet = {tuple1, tuple2} # no error as tuples are immutable

>>> print(tupleSet)

{(4, 5, 6), (1, 2, 3)}

>>> list1 = [1, 2, 3]

>>> list2 = [4, 5, 6]

>>> listSet = {list1, list2} #will raise error as lists are mutable

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'list'

加入元素

使用内置 add函数向集合中加入元素。

>>> numSet = {1, 2, 3, 4, 5}

>>> numSet.add(6)

>>> print(numSet)

{1, 2, 3, 4, 5, 6}

注意:在集合中加入重复元素是无效的,此情况下也不会报错。

>>> numSet = {1, 2, 3, 4, 5}

>>> numSet.add(5)

>>> print(numSet)

{1, 2, 3, 4, 5}

删除元素

使用内置remove函数删除集合中元素。

>>> numSet = {1, 2, 3, 4, 5}

>>> numSet.remove(5)

>>> print(numSet)

{1, 2, 3, 4}

注意:删除集合中不存在的元素不会报错。

>>> numSet = {1, 2, 3, 4, 5}

>>> numSet.remove(99)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 99

集合长度

使用内置len函数查找集合长度。

>>> numSet = {1, 2, 3, 4, 5}

>>> len(numSet)

5

查找

使用in运算符查找集合中元素。

>>> numSet = {1, 2, 3, 4, 5}

>>> 2 in numSet

True

>>> 99 in numSet

False

接下来介绍如何执行集合操作。

交集

使用 &运算符寻找两个集合的交集。

>>> setA = {1, 2, 3, 4, 5}

>>> setB = {3, 4, 5, 6, 7}

>>> intersection = setA & setB

>>> print(intersection)

{3, 4, 5}

并集

使用|运算符将两个集合合并。

>>> setA = {1, 2, 3, 4, 5}

>>> setB = {3, 4, 5, 6, 7}

>>> union = setA | setB

>>> print(union)

{1, 2, 3, 4, 5, 6, 7}


补集

补集返回值为仅在第一个集合中出现的值。

使用-运算符寻找补集。

>>> setA = {1, 2, 3, 4, 5}

>>> setB = {3, 4, 5, 6, 7}

>>> difference = setA - setB

>>> print(difference)

{1, 2}

>>> reverseDifference = setB - setA

>>> print(reverseDifference)

{6, 7}

集合对称差

对称差返回值是由只属于两个集合中任一集合,而非全部集合的元素组成的集合。

使用 ^ 运算符寻找两个集合的对称差。

>>> setA = {1, 2, 3, 4, 5}

>>> setB = {3, 4, 5, 6, 7}

>>> symmDiff = setA ^ setB

>>> print(symmDiff)

{1, 2, 6, 7}

检查超集

若集合A含有集合B中所有元素,则集合A为集合B的超集。

使用>=运算符检验左侧集合是否为右侧集合的超集。

>>> bigSet = {1, 2, 3, 4, 5}

>>> smallSet = {3, 4}

>>> isSuperSet = bigSet >= smallSet

>>> print(isSuperSet)

True

使用<= 运算符检验右侧集合是否为左侧集合的超集。

>>> bigSet = {1, 2, 3, 4, 5}

>>> smallSet = {3, 4}

>>> isSuperSet = smallSet <= bigSet

>>> print(isSuperSet)

True


如何使用字典?



在Python中,字典用于储存键值对。

初始化

同样可以使用花括号{}初始化字典,并使用key :value 语法声明键值对。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3}

也可使用内置dict函数初始化空字典。

>>> emptyDict = dict()

>>> print(emptyDict)

{}

还可直接使用空花括号{}初始化空字典。

>>> emptyDict = {}

>>> print(emptyDict)

{}

注意:不可改变字典中的键。尝试使用可变键创建字典会报错。

>>> tupleA = (1, 2, 3) # tuples are immutable

>>> stringA = "I love Python!" # strings are immutable

>>> floatA = 3.14 # float values are immutable

>>> dictA = {tupleA : True, stringA : False, floatA : True} # no error as all keys are immutable

>>> print(dictA)

{(1, 2, 3): True, 'I love Python!': False, 3.14: True}

>>> listB = [1, 2, 3] #list is mutable

>>> dictB = {listB : True} # raises an error as lists are mutable

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'list'

获取数据

使用方括号([])从字典中获取键值。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> JohnsNumber = nameToNumber["John"]

>>> print(JohnsNumber)

1

注意:寻找不存在的键会报错。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> nameToNumber["Sam"]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 'Sam'

为避免报错,可以使用内置 get函数。使用该函数寻找不存在的键返回值为None,但不会报错。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> johnsNumber = nameToNumber.get("John")

>>> print(johnsNumber)

1

>>> samsNumber = nameToNumber.get("Sam"

>>> print(samsNumber)

None

若字典中缺少键,则可以使用get 函数返回默认值。将所需的默认值作为第二个参数传递给get 函数。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> johnsNumber = nameToNumber.get("John", 99)

>>> print(johnsNumber)

1

>>> samsNumber = nameToNumber.get("Sam", 99)

>>> print(samsNumber)

99

修改数据

使用内置setdefault 函数将数据插入字典。

只有在字典中不存在该键时,setdefault才会在字典中创建新键值对。若该键存在,也不会被覆盖。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> nameToNumber.setdefault("Sam", 4)

4

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 4}

>>> nameToNumber.setdefault("Sam", 99) # no changes as the key already exists

4

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 4}

使用内置update函数修改字典中现存值。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> nameToNumber.update({"Sam" : 4}) # creates new entry

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 4}

>>> nameToNumber.update({"Sam" : 99}) # updates existing entry

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 99}

也可使用方括号修改现存值。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> nameToNumber["Sam"] = 4 # creates new entry

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 4}

>>> nameToNumber["Sam"] = 99 # updates existing entry

>>> print(nameToNumber)

{'John': 1, 'Harry': 2, 'Jacob': 3, 'Sam': 99}

删除数据

使用 del命令删除字典中的键。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> del nameToNumber["John"]

>>> print(nameToNumber)

{'Harry': 2, 'Jacob': 3}

注意:删除不存在的键会报错。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> del nameToNumber["Sam"]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

KeyError: 'Sam'

迭代

使用内置keys功能在字典中的键上进行迭代。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> names = list(nameToNumber.keys()) # using list() to store in a list

>>> print(names)

['John', 'Harry', 'Jacob']

可以使用内置的values函数迭代字典中的值。

>>> nameToNumber = {"John" : 1, "Harry" : 2, "Jacob" : 3}

>>> values = list(nameToNumber.values())

>>> print(values)

[1, 2, 3]


留言 点赞 关注

我们一起分享AI学习与发展的干货

如需转载,请后台留言,遵守转载规范

相关推荐

win7如何用光盘重装系统(如何用光盘重装系统win7旗舰版)
  • win7如何用光盘重装系统(如何用光盘重装系统win7旗舰版)
  • win7如何用光盘重装系统(如何用光盘重装系统win7旗舰版)
  • win7如何用光盘重装系统(如何用光盘重装系统win7旗舰版)
  • win7如何用光盘重装系统(如何用光盘重装系统win7旗舰版)
win7用360升级win10(如何用360更新windows7)

360系统重装大师可以升级win10,但具体要看你原来电脑系统的系统分区和硬盘分区是否满足WIN10的需要,WIN10系统最少要求硬盘C盘保留20G空间,内存需要4G以上,如果你的电脑硬件配置不够满足...

电脑无线鼠标没反应怎么办(电脑无线鼠标不起作用怎么办)

电脑无线鼠标不动了,解决方法:1、确认鼠标上的开关是否打开。如果没打开,请打开开关按钮。2、确认鼠标里的电池是否有电。如果电池没电,请更换新的电池。3、确认接收器是否连接好,如果已接好,尝试请更换另一...

笔记本电脑系统哪个最好用(笔记本电脑用哪个系统好用)

  1、主流的是xp、win7和win10,其中win10系统是最新的系统,win7是最主流的。  2、由于现在笔记本电脑都是最新型的硬件,不适合装win7系统,会出现不兼容的问题。  3、对于二手旧...

limbo模拟器win7可上网(limbo模拟器win7镜像 完整版)

1.首先下载limbo这款软件,安装到手机上打开。2.下载镜像,镜像可以随意,win95、98、xp都可以3.下载解压,img格式文件就是系统镜像,把他放到手机里,存放路径随意,最好是sd卡主目录...

win10安装选哪个版本(win10 安装什么版本)

1、家庭版家庭版可以理解为是一个阉割版本,没有特别多丰富的功能,适合家庭日常休闲、娱乐、工作、影音,大家都可以很好的上手,轻度电脑用户专属。现在有一些品牌整机出厂预装的大多就是这一版本。但是电脑在使用...

windows2008安装(window2008安装教程)

安装:在控制面板-程序-打开或关闭windows功能里,勾选internet信息服务,确定后就会安装。方法:1、右键“我的电脑”,选择“管理”,打开“服务器管理器”2、点击左边菜单栏“角色”调出角色窗...

影驰显卡驱动官网(影驰主板驱动官网)

首先浏览器搜索影驰显卡官网,进入官网【点此进入】进入官网之后点击上方菜单栏中的服务支持。然后在下拉菜单中选择驱动下载。2、点进页面之后往下滑动,找到搜索页面。在这里根据你的产品信息分别选择分类和型号,...

联想售后服务公司大全(联想各大服务售后地址)

方法如下:使用电脑打开QQ浏览器。打开浏览器以后,使用搜索引擎搜索联想,找到官方网站。点击打开官方网站,将鼠标放在服务选项上,弹出界面的左侧可以看到服务网点查询选项,点击该选项会自动定位用户所在的位置...

oem win10(oem win10 换硬盘)

我不能对Windows10OEM版本做出评价。但是,OEM版本通常比零售版本便宜且功能相同,但可能在支持和保修方面有所区别。总的来说,购买合法,适合您的操作系统版本是最重要的。wⅰn10的OEM版...

为什么系统重装不了(系统重装不了的n种情况)

1、首先看电脑里是不是安装了其他版本的office,如果之前安装有的话,要卸载之前的版本。1.重新安装office,选择“添加或删除功能”,点“下一步”;2.“选择应用程序的高级自定义”,然后你会...

w10如何定时关机(win10怎么样定时关机)

进入“电脑属性”。右键点击“此电脑”图标——“属性”,进入“电脑属性”。进入“控制面板主页”。点击左侧“控制面板主页”,进入“控制面板主页”。进入“系统和安全”设置。点击“系统和安全”,进入“系统和安...

fast路由器地址(fast路由器ip地址)

fast路由器的登录地址(管理页面地址)是falogin.cn,电脑、手机连接到fast路由器的网络后,在浏览器中输入falogin.cn,就可以进入到fast路由器的登录页面。在登录页面中,输入正确...

电脑进不去桌面怎么重新安装系统

把一个系统放到桌面的方法方法1在桌面上空白处单击鼠标右键,在弹出的快捷菜单中选择【个性化】菜单命令2弹出【个性化】窗口3选择【更改桌面图标】链接4弹出【桌面图标设置】对话框5选择要添加的桌面图标,在复...

cad2008下载免费中文版破解版

1还可以。不是很难用。2比较用的多的是CAD2007和CAD2004。但实际上CAD2008也是好用的。这是大家用的少。3 CAD哪个版本比较好?其实主要看周围的人用什么版本。一般人选...