Python字典和集合操作指南:创建、获取值、修改和删除键值对,复制和遍历方法全解析

文章目录

字典(dict)

字典是一种新的数据结构,被称为映射(mapping)。它类似于列表,都用于存储对象。然而,相比列表,字典在查询数据时性能更佳。这是因为在字典中,每个元素都有一个唯一的名字,通过这个名字可以快速查找到指定的元素。

字典由多个键值对(key-value)构成,其中每个键值对都有一个唯一的键和对应的值。通过键可以快速查询到对应的值。创建字典的方式是使用大括号 {},并提供键值对。键可以是任意不可变对象(例如 int、str、bool、tuple 等),但通常我们使用字符串作为键。

创建字典

使用{}来创建字典,语法:{k1:v1,k2:v2,k3:v3}。

python 复制代码
# 使用{}
d = {'name':'孙悟空', 'age':18, 'gender':'男'}

也可以使用dict()函数来创建字典,每一个参数都是一个键值对,参数名就是键,参数值就是值(这种方式创建的字典,key都是字符串)。

python 复制代码
# 使用dict()函数来创建字典
d = dict(name='孙悟空', age=18, gender='男')

还可以将一个包含双值子序列的序列转换为字典,双值序列指的是序列中只有两个值,如[1,2]('a',3)'ab'等。子序列指的是序列中的元素也是序列的情况,比如[(1,2),(3,5)]

python 复制代码
d = dict([('name', '孙悟饭'), ('age', 18)])

获取字典中的值

可以使用键来获取字典中的值,语法为:d[key]。如果键不存在,会抛出异常KeyError

python 复制代码
print(d['age'])

可以使用get(key[, default])方法来根据键获取字典中的值。如果键在字典中不存在,则会返回None,也可以指定一个默认值作为第二个参数,当获取不到值时返回默认值。

python 复制代码
print(d.get('name'))
print(d.get('hello', '默认值'))

修改字典

可以使用d[key] = value来修改字典中的键值对。如果键存在,则会覆盖其对应的值;如果键不存在,则会添加新的键值对。

python 复制代码
d['name'] = 'sunwukong'  # 修改字典的key-value
d['address'] = '花果山'  # 向字典中添加key-value

另外,还可以使用setdefault(key[, default])方法向字典中添加键值对。如果键已经存在于字典中,则返回键对应的值,不会对字典做任何操作;如果键不存在,则向字典中添加该键,并设置对应的值。

python 复制代码
result = d.setdefault('name', '猪八戒')
result = d.setdefault('hello', '猪八戒')

还可以使用update([other])方法将其他字典中的键值对添加到当前字典中。如果有重复的键,则后面的键值对会替换当前的。

python 复制代码
d = {'a': 1, 'b': 2, 'c': 3}
d2 = {'d': 4, 'e': 5, 'f': 6, 'a': 7}
d.update(d2)

删除字典中的键值对

可以使用del关键字删除字典中的键值对。

python 复制代码
del d['a']
del d['b']

还可以使用popitem()方法随机删除字典中的一个键值对,一般会删除最后一个键值对。删除后,该方法会将删除的键值对作为返回值返回,返回值是一个元组,包含两个元素,第一个元素是被删除的键,第二个元素是被删除的值。

python 复制代码
result = d.popitem()

另外,还可以使用pop(key[, default])方法根据键删除字典中的键值对。该方法会返回被删除的值。如果删除不存在的键,会抛出异常。如果指定了默认值,并且删除的键不存在,则不会报错,而是直接返回默认值。

python 复制代码
result = d.pop('d')
result = d.pop('z', '这是默认值')

此外,可以使用clear()方法来清空字典中的键值对。

python 复制代码
d.clear()

复制字典

可以使用copy()方法对字典进行浅复制。复制后的对象和原对象是独立的,修改一个不会影响另一个。需要注意的是,浅复制只会复制对象内部的值,对于值也是可变对象的情况,它们不会被复制。

python 复制代码
d = {'a': 1, 'b': 2, 'c': 3}
d2 = d.copy()
python 复制代码
d = {'a': {'name': '孙悟空', 'age': 18}, 'b': 2, 'c': 3}
d2 = d.copy()
d2['a']['name'] = '猪八戒'
python 复制代码
print('d =', d, id(d))
print('d2 =', d2, id(d2))

字典推导式

与列表推导式类似,Python 还支持使用字典推导式创建字典。

python 复制代码
# 创建一个包含数字的字典
d = {i: i**2 for i in range(5)}
print(d)  # 输出:{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

遍历字典

遍历字典是指依次访问字典中的每一个键值对。在Python中,有几种方法可以实现字典的遍历操作。

使用keys()方法

keys()方法会返回字典的所有键。我们可以通过遍历键来获取字典中的每个键值对。

示例代码:

python 复制代码
d = {'name':'孙悟空','age':18,'gender':'男'}

for k in d.keys():
    print(k, d[k])

使用keys()方法可以获取字典中的所有键,然后通过遍历键来获取每个键值对的值。

使用values()方法

values()方法会返回字典的所有值。我们可以通过遍历值来获取字典中的每个键值对。

示例代码:

python 复制代码
d = {'name':'孙悟空','age':18,'gender':'男'}

for v in d.values():
    print(v)

使用values()方法可以获取字典中的所有值,然后通过遍历值来访问每个键值对的值。

使用items()方法

items()方法会返回字典中的所有项,每一项是一个包含键和值的双值子序列。

示例代码:

python 复制代码
d = {'name':'孙悟空','age':18,'gender':'男'}

for k, v in d.items():
    print(k, '=', v)

使用items()方法可以获取字典中的所有项,然后通过遍历项来获取每个键值对的键和值。

小结

字典是一种非常灵活的数据结构,可以用于存储各种类型的数据。通过键值对的方式,我们可以快速地查找、添加、修改和删除元素。此外,字典还支持字典推导式等高级用法,可以帮助我们更加方便地操作数据,同时你可以根据具体需求选择合适的方法进行遍历字典。

集合(set)

集合和列表非常相似,不同点如下:

  1. 集合中只能存储不可变对象
  2. 集合中存储的对象是无序的,不按元素的插入顺序保存
  3. 集合中不能存在重复的元素

创建集合

可以使用{}来创建集合:

python 复制代码
s = {10, 3, 5, 1, 2, 1, 2, 3, 1, 1, 1, 1}  # <class 'set'>

注意,集合中不能包含可变对象,例如列表:

python 复制代码
# s = {[1, 2, 3], [4, 6, 7]}  # TypeError: unhashable type: 'list'

可以使用set()函数来创建集合:

python 复制代码
s = set()  # 空集合

还可以通过set()将序列和字典转换为集合:

python 复制代码
s = set([1, 2, 3, 4, 5, 1, 1, 2, 3, 4, 5])
s = set('hello')
s = set({'a': 1, 'b': 2, 'c': 3})  # 只包含字典中的键

集合操作

可以使用以下操作来处理集合:

  • 使用innot in来检查集合中的元素是否存在
  • 使用len()来获取集合中元素的数量
  • 使用add()向集合中添加元素
  • 使用update()将一个集合中的元素添加到当前集合中
  • 使用pop()随机删除并返回一个集合中的元素
  • 使用remove()删除集合中的指定元素
  • 使用clear()清空集合
  • 使用copy()进行浅复制

示例代码:

python 复制代码
s = {'a', 'b', 1, 2, 3, 1}

print('c' in s)  # False
print(len(s))

s.add(10)
s.add(30)

s2 = set('hello')
s.update(s2)
s.update((10, 20, 30, 40, 50))
s.update({10: 'ab', 20: 'bc', 100: 'cd', 1000: 'ef'})

result = s.pop()

s.remove(100)
s.remove(1000)

s.clear()

print(result)
print(s, type(s))

集合运算

在对集合进行运算时,不会影响原来的集合,而是返回一个运算结果。

示例代码:

python 复制代码
s = {1, 2, 3, 4, 5}
s2 = {3, 4, 5, 6, 7}

result = s & s2  # 交集运算
result = s | s2  # 并集运算
result = s - s2  # 差集
result = s ^ s2  # 异或集

a = {1, 2, 3}
b = {1, 2, 3, 4, 5}

result = a <= b  # 检查一个集合是否是另一个集合的子集
result = {1, 2, 3} <= {1, 2, 3}  # True
result = {1, 2, 3, 4, 5} <= {1, 2, 3}  # False

result = {1, 2, 3} < {1, 2, 3}  # 检查一个集合是否是另一个集合的真子集
result = {1, 2, 3} < {1, 2, 3, 4, 5}  # True

result = a >= b  # 检查一个集合是否是另一个的超集
result = a > b  # 检查一个集合是否是另一个的真超集

print('result =', result)

以上是关于集合的一些基本操作和运算,总结如下。

小结

当使用集合时,需要注意以下几点:

  1. 集合是一种无序且元素唯一的数据结构。
  2. 可以使用{}set()函数创建集合。
  3. 集合中只能存储不可变的对象,不能包含可变对象。
  4. 可以使用innot in来检查集合中的元素是否存在。
  5. 使用len()获取集合中元素的数量。
  6. 使用add()向集合中添加元素,使用update()将一个集合中的元素添加到当前集合中。
  7. 使用pop()随机删除并返回一个集合中的元素,使用remove()删除集合中的指定元素,使用clear()清空集合。
  8. 使用copy()进行浅复制。
  9. 集合可以进行交集运算(&)、并集运算(|)、差集运算(-)和异或集运算(^)。
  10. 可以使用<=<>=>来比较两个集合的关系,如子集、超集和真子集等。

总结起来,集合是一种非常有用的数据结构,适用于需要存储一组元素并进行快速元素查找和去重的场景。

python精品专栏推荐


python基础知识(0基础入门)

【python基础知识】0.print()函数
【python基础知识】1.数据类型、数据应用、数据转换
【python基础知识】2.if条件判断与条件嵌套
【python基础知识】3.input()函数
【python基础知识】4.列表和字典
【python基础知识】5.for循环和while循环
【python基础知识】6.布尔值和四种语句(break、continue、pass、else)
【python基础知识】7.实操-用Python实现"文字PK"小游戏(一)
【python基础知识】7.实操-用Python实现"文字PK"小游戏(二)
【python基础知识】8.编程思维:如何解决问题-思维篇
【python基础知识】9.函数的定义和调用
【python基础知识】10.用函数编写程序 - 实操篇
【python基础知识】10.用Python实现石头剪刀布小游戏-函数实操篇
【python基础知识】11.如何debug -常见报错原因及排查思路 - 思维篇
【python基础知识】12.类与对象(一)
【python基础知识】12.类与对象(二)
【python基础知识】13.类与对象(三)
【python基础知识】13.类与对象(四)
【python基础知识】14.图书管理系统的搭建(类与对象实操)
【python基础知识】15.编码基础知识
【python基础知识】16.文件读写基础及操作
【python基础知识】16."古诗默写题"的python实现(文件读写和编码-实操篇)
【python基础知识】17.模块的概念以及如何引入
【python基础知识】18.实操-使用python自动群发邮件
【python基础知识】19.产品思维以及流程图的使用 - 思维篇
【python基础知识】20."午饭吃什么"的python实现(产品思维-实操篇)
【python基础知识】21.高效偷懒的正确打开方式-毕业篇
【python文件处理】CSV文件的读取、处理、写入
【python文件处理】Excel自动处理(使用 openpyxl)
【python文件处理】-excel格式处理


python爬虫知识

【python爬虫】1.爬虫基础知识
【python爬虫】2.网页基础知识
【python爬虫】3.爬虫初体验(BeautifulSoup解析)
【python爬虫】4.爬虫实操(菜品爬取)
【python爬虫】5.爬虫实操(歌词爬取)
【python爬虫】6.爬虫实操(带参数请求数据)
【python爬虫】7.爬到的数据存到哪里?
【python爬虫】8.温故而知新
【python爬虫】9.带着小饼干登录(cookies)
【python爬虫】10.指挥浏览器自动工作(selenium)
【python爬虫】11.让爬虫按时向你汇报
【python爬虫】12.建立你的爬虫大军
【python爬虫】13.吃什么不会胖(爬虫实操练习)
【python爬虫】14.Scrapy框架讲解
【python爬虫】15.Scrapy框架实战(热门职位爬取)
【python爬虫】16.爬虫知识点总结复习

相关推荐
这个DBA有点耶6 分钟前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
用户83562907805113 分钟前
Python 实现 PDF 文件加密与解密方法
后端·python
用户83562907805118 分钟前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
这个DBA有点耶2 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技3 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend3 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence7 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
你好潘先生8 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师9 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码9 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python