【Python】数据容器:列表,元组,字符串,集合字典及通用操作
文章目录
- 一.序列
- 1.1list列表
- 定义
- 常用操作
- 列表的遍历
- 1.2tuple元组
- 定义
- 常见操作
- 元组的遍历
- 1.3str字符串
- 定义
- 常见操作
- 字符串的遍历
- 1.4序列常用操作——切片
- 二.set集合
- 定义
- 常见操作
- 集合的遍历
- 三.dict字典
- 定义
- 常用操作
- 字典的嵌套
- *数据容器对比总结
- 四.数据容器的通用操作
- 4.1通用统计功能
- 4.2通用转换功能
- 4.3通用排序功能
我们首先来思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。如何做呢?

学习数据容器,就是为了批量存储或批量使用多份数据
Python中的数据容器:
一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素。每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
数据容器根据特点的不同,如:
- 是否支持重复元素
- 是否可以修改
- 是否有序
等分为5类,分别是:列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
一.序列
序列是指:内容连续、有序,可使用下标索引的一类数据容器
列表、元组、字符串,均可以可以视为序列。
1.1list列表
定义
列表内的每一个数据,称之为元素
以[ ] 作为标识
列表内每一个元素之间用, 逗号隔开
元素的数据类型没有任何限制,甚至元素也可以是列表,这样就定义了嵌套列表
# 字面量
[元素1,元素2,元素3,元素4, ...]# 定义变量
变量名称 = [元素1,元素2,元素3,元素4, ...]# 定义空变量
变量名称 = []
变量名称 = list()
演示代码:
# 字符串列表
name_list = ['green','yello','blue']
print(name_list)
print(type(name_list))# 各种类型列表
name_list = ['green','666','blue']
print(name_list)
print(type(name_list))# 嵌套列表
name_list = [['green'],['666'],['blue']]
print(name_list)
print(type(name_list))'''运行结果:
['green', 'yello', 'blue']
<class 'list'>
['green', '666', 'blue']
<class 'list'>
[['green'], ['666'], ['blue']]
<class 'list'>'''
列表的下标索引
①如图,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增

我们只需要按照下标索引,即可取得对应位置的元素。
②或者,可以反向索引,如图,从后向前,下标索引为:-1、-2、-3,依次递减。

③如果列表是嵌套的列表,同样支持下标索引

演示代码:
# 正向索引
name_list = ['green','yello','blue']
print(name_list[0])
print(name_list[1])
print(name_list[2])# 反向索引
name_list = ['green','yello','blue']
print(name_list[-1])
print(name_list[-2])
print(name_list[-3])# 嵌套索引
name_list = [[1,2,3],[4,5],[6,7,8]]
print(name_list[0][0])
print(name_list[-2][-1])
print(name_list[-3][2])'''运行结果:
green
yello
blue
blue
yello
green
1
5
3
'''
要注意下标索引的取值范围,超出范围无法取出元素,并且会报错。
常用操作

①查找
【功能】:查找指定元素在列表的下标,如果找不到,报错ValueError
【语法】:列表.index(元素)
index就是列表对象(变量)内置的方法(函数)
如果被查找的元素不存在,会报错
②修改
【功能】:修改特定位置(索引)的元素值
【语法】:列表[下标]=值
可以使用如上语法,直接对指定下标(正向,反向下标均可)的值进行:重新赋值
③插入
【功能】:在指定的下标位置,插入指定的元素
【语法】:列表.insert(下标,元素)
④追加
【功能】:将指定元素,追加到列表的尾部
【语法】:列表.append(元素)
追加一批元素->列表.extend(其他数据容器)
⑤索引删除
【语法1】:del 列表[下标]
【语法1】:列表.pop(下标),同时可以把删除的元素作为返回值去得到
⑥指定内容删除
【语法】:列表.remove(元素)
从前到后搜索,只能删掉一个指定内容的元素
⑦清空列表
【语法】:列表.clear()
⑧统计
【语法】:列表.count(元素)
【功能】:统计某元素在列表中数量
【语法】:len(列表)
【功能】:统计列表内有多少元素
代码示例
name_list = ['green','yello','blue']
# 查找
index = name_list.index("yello")
print(f"yello在列表中的下标索引值是:{index}")
# 修改
name_list[0] = "修改"
print(f"列表被修改元素值后,输出结果是:{name_list}")
# 插入
name_list.insert(1,'插入')
print(f"列表插入元素后,结果是:{name_list}")
# 追加
name_list.append('追加')
print(f"列表追加元素后,结果是:{name_list}")
# 追加一批元素
name_list.extend([1,1,3])
print(f"列表追加一个新的列表后,结果是:{name_list}")
# 删除
del name_list[0]
print(f"列表删除元素后,结果是:{name_list}")
element = name_list.pop(0)
print(f"通过pop取出元素后,结果是:{name_list},取出的元素是{element}")
# 指定内容删除
name_list.remove('追加')
print(f"列表删除指定内容元素后,结果是:{name_list}")
# 统计
count = name_list.count(1)
print(f"列表中1的数量是:{count}")
num = len(name_list)
print(f"列表中的元素数量是:{num}")
# 清空
name_list.clear()
print(f"列表被清空了,结果是:{name_list}")'''运行结果:
yello在列表中的下标索引值是:1
列表被修改元素值后,输出结果是:['修改', 'yello', 'blue']
列表插入元素后,结果是:['修改', '插入', 'yello', 'blue']
列表追加元素后,结果是:['修改', '插入', 'yello', 'blue', '追加']
列表追加一个新的列表后,结果是:['修改', '插入', 'yello', 'blue', '追加', 1, 1, 3]
列表删除元素后,结果是:['插入', 'yello', 'blue', '追加', 1, 1, 3]
通过pop取出元素后,结果是:['yello', 'blue', '追加', 1, 1, 3],取出的元素是插入
列表删除指定内容元素后,结果是:['yello', 'blue', 1, 1, 3]
列表中1的数量是:2
列表中的元素数量是:5
列表被清空了,结果是:[]Process finished with exit code 0
'''
总结列表的特点:
- 可以容纳多个元素(上限为 2**63-1 、9223372036854775807个)
- 可以容纳不同类型的元素(混装)
- 数据是有序存储的(有下标序号)
- 允许重复数据存在
- 可以修改(增加或删除元素等)
列表的遍历
既然数据容器可以存储多个元素,那么,就会有需求从容器内依次取出元素进行操作。
将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。
- while循环
# 定义一个变量来标记列表的下标
index = 0 # 初始值为0
while index < len(列表): # 循环条件为:下标值<列表的元素数量元素 = 列表[index]对元素进行处理index += 1
- for循环
对比while,for循环更加适合对列表等数据容器进行遍历。
for 临时变量 in 数据容器 :对临时变量进行处理
for循环和while对比
while循环和for循环,都是循环语句,但细节不同:
在循环控制上:
·white循环可以自定循环条件,并自行控制
·for循环不可以自定循环条件,只可以一个个从容器内取出数据在无限循环上:
·while福环可以通过条件控制做到无限循环·for循环理伦上不可以,因为被遍历的容器容量不是无限的
在使用场景上:
while循环适用于任何想要循环的场景
for循环适用于,遍历数据容器的场景或简单的因定次数循环场景
【代码示例】
# 使用while循环遍历列表
def list_while_func():my_list = ["blue", "yello", "green"]# 定义一个变量来标记列表的下标index = 0 # 初始值为0while index < len(my_list):# 通过index变量取出对应下标的元素element = my_list[index]print(f"列表的元素:{element}")index += 1
list_while_func()#使用for循环遍历列表
def list_for_func():my_list = [1,2,3,4,5]for element in my_list:print(f"列表元素有:{element}")
list_for_func()'''运行结果:
列表的元素:blue
列表的元素:yello
列表的元素:green
列表元素有:1
列表元素有:2
列表元素有:3
列表元素有:4
列表元素有:5'''
列表是可以修改的,如果想要传递的信息不被纂改,那么元组来啦~
1.2tuple元组
定义
元组一旦定义完成,就不可修改
元组定义:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。
#定义元组字面量
(元素,元素,......,元素)#定义元组数=变量
变量名称 = (元素,元素,...... ,元素)#定义空元组
变量名称 = () #方式一
变量名称 = tuple() #方式二
注:
1、元组只有一个数据时,这个数据后面要添加逗号,否则不是元组类型!
2、元组也支持嵌套
代码示例:
t1 = (1,"Hello",True)
t2 = ()
t3 = tuple ()
t4 = (1,)
t5 = ((4,5,6),(8,9))
print(f"t1的类型是:{type(t1)},内容是:{t1}")
print(f"t2的类型是:{type(t2)},内容是:{t2}")
print(f"t3的类型是:{type(t3)},内容是:{t3}")
print(f"t4的类型是:{type(t4)},内容是:{t4}")
print(f"t5的类型是:{type(t5)},内容是:{t5}")'''运行结果:
t1的类型是:<class 'tuple'>,内容是:(1, 'Hello', True)
t2的类型是:<class 'tuple'>,内容是:()
t3的类型是:<class 'tuple'>,内容是:()
t4的类型是:<class 'tuple'>,内容是:(1,)
t5的类型是:<class 'tuple'>,内容是:((4, 5, 6), (8, 9))'''
元组的下标索引
同列表,示例:
t5 = ((4,5,6),(8,9))
num = t5[1][0]
'''运行结果:
8'''
常见操作

元组由于不可修改的特性,所以其操作方法非常少。
元组的三种方法和列表相对应的这三种方法操作一致。
元组的遍历
元组同样支持while循环和for循环的遍历操作
用法和列表遍历一致
总结元组的特点
• 可以容纳多个数据
• 可以容纳不同类型的数据(混装)
• 数据是有序存储的(下标索引)
• 允许重复数据存在
• 不可以修改 (增加或删除元素等),但如果元组中嵌套的有列表,那么列表中的元素可以修改(列表list的本质没有改变,所以不违背元组不可以修改的原则)
• 支持for循环
1.3str字符串
定义
字符串是字符的容器,一个字符串可以存放任意数量的字符。
字符串的下标索引
和其它容器如:列表、元组一样,字符串也可以通过下标进行访问
• 从前向后,下标从 0 开始
• 从后向前,下标从 -1 开始
【代码示例】
my_str = "abcdefg"
value1 = my_str[2]
value2 = my_str[-3]
print(f"从字符串中取下标为2的元素值是{value1},下标为-3的元素值是{value2}")'''运行结果:
从字符串中取下标为2的元素值是c,下标为-3的元素值是e'''
常见操作

同元组一样,字符串是一个:无法修改的数据容器。
①字符串的替换
【功能】:将字符串内的全部:字符串1,替换为字符串2
【语法】:字符串.replace(字符串1,字符串2)
注意:不是修改字符串本身,而是得到了一个新字符串
②字符串的分割
【功能】:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中
【语法】:字符串.split(分隔符字符串)
注意:字符串本身不变,而是得到了一个列表对象
③字符串的规整操作
【功能】:去前后空格
【语法】:```字符串.strip()``
【功能】:去前后指定字符串
【语法】:```字符串.strip(字符串)``
注意:传入的是"12",其实就是:"1"和"2"都会移除,是按照单个字符
④查找
【功能】:查找给定字符的第一个匹配项的下标
【语法】:字符串.index(字符串)
代码示例
# 查找
str = "mountain and sea"
value = str.index("and")
print(f"在字符串{str}中查找“and”,其起始下标是{value}")# 替换
str = "itmountain and itsea"
new_str = str.replace("it","程序")
print(f"将字符串 {str},进行替换得到 {new_str}")# 分割
my_str = "hello python itCSDN itlove"
my_str_list = my_str.split(" ")
print(f"将字符串{my_str}进行split切分后得到:{my_str_list}, 类型是:{type(my_str_list)}")# 规整操作
my_str = " itCSDN and itlove "
new_my_str = my_str.strip() # 不传入参数,去除首尾空格
print(f"字符串{my_str}被strip后,结果:{new_my_str}")
my_str = "12itCSDN and itlove21"
new_my_str = my_str.strip("12")
print(f"字符串{my_str}被strip('12')后,结果:{new_my_str}")# 统计
my_str = "itCSDN and itlove"
count = my_str.count("it")
print(f"字符串{my_str}中it出现的次数是:{count}")
my_str = "itCSDN and itlove"
num = len(my_str)
print(f"字符串{my_str}的长度是:{num}")'''运行结果:
在字符串mountain and sea中查找“and”,其起始下标是9
将字符串 itmountain and itsea,进行替换得到 程序mountain and 程序sea
将字符串hello python itCSDN itlove进行split切分后得到:['hello', 'python', 'itCSDN', 'itlove'], 类型是:<class 'list'>
字符串 itCSDN and itlove 被strip后,结果:itCSDN and itlove
字符串12itCSDN and itlove21被strip('12')后,结果:itCSDN and itlove
字符串itCSDN and itlove中it出现的次数是:2
字符串itCSDN and itlove的长度是:17
'''
字符串的遍历
同列表,元组一样
总结元组的特点
作为数据容器,字符串有如下特点:
• 只可以存储字符串
• 长度任意(取决于内存大小)
• 支持下标索引
• 允许重复字符串存在
• 不可以修改 (增加或删除元素等)
• 支持for循环
1.4序列常用操作——切片
序列支持切片,即:列表、元组、字符串,均支持进行切片操作
切片:从一个序列中,取出一个子序列
【语法】:序列[起始下标:结束下标:步长]
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列:
• 起始下标表示从何处开始,可以留空,留空视作从头开始
• 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
• 步长表示,依次取元素的间隔,默认为1:步长 1 表示,一个个取元素;步长 2 表示,每次跳过1个元素取;步长 N表示,每次跳过N-1 个元素取
• 步长为负数表示,反向取(注意,起始下标和结束下标也要反向标记)
注意. 此操作不会影响序列本身,而是会得到一个新的序列(列表、元组、字符串)
# 对List进行切片,从1开始,4结束,步长1
my_List = [0,1,2,3,4,5,6]
result1 = my_List[1:4] # 步长默认是1,所以可以省略不写
print(f"结果1:{result1}")
result6 = my_List[3:1:-1] # 步长默认是1,所以可以省略不写
print(f"结果6:{result6}")# 对tuple进行切片,从头开始,到最后结束,步长1
my_tuple = (0,1,2,3,4,5,6)
result2 = my_tuple[:] # 起始和结束不写表示从头到尾,步长为1可以省略
print(f"结果2:{result2}")
result5 = my_tuple[::-2]
print(f"结果5:{result5}")# 对str进行切片,从头开始,到最后结束,步长2
my_str = "01234567"
result3 = my_str[::2]
print(f"结果3:{result3}")
result4 = my_str[::-1]
print(f"结果4:{result4}")'''运行结果:
结果1:[1, 2, 3]
结果6:[3, 2]
结果2:(0, 1, 2, 3, 4, 5, 6)
结果5:(6, 4, 2, 0)
结果3:0246
结果4:76543210
'''
总结:
- 列表可修改,支持重复元素且有序
- 元组,字符串不可修改,支持重复元素且有序
序列这三种数据容器基本可以满足大多数使用场景,但是它们存在局限:都支持重复元素。如果场景需要对内容做去重处理,就不方便了,那么集合来啦~
二.set集合
定义
• 集合内不允许重复元素(去重)
• 集合内元素是无序的(不支持下标索引)
# 定义集合字面量
{元素,元素,.... ,元素}
# 定义集合变量
变量名称 = {元素,元素,.... ,元素}
# 定义空集合
变量名称 = set()
结合集合特点进行代码演示:
my_set_empty = set() # 定义空集合
print(f"my_set_empty的内容是:{my_set_empty}, 类型是:{type(my_set_empty)}")
my_set = {"CSDN程序员社区", "CSDN灌水乐园", "itCSDN", "CSDN灌水乐园", "CSDN程序员社区", "itCSDN"}
print(f"my_set的内容是:{my_set}, 类型是:{type(my_set)}")'''运行结果:
my_set_empty的内容是:set(), 类型是:<class 'set'>
my_set的内容是:{'itCSDN', 'CSDN灌水乐园', 'CSDN程序员社区'}, 类型是:<class 'set'>'''
常见操作
首先,因为集合是无序的,所以集合不支持下标索引访问
但是结合和列表一样,是允许修改的,所以我们来看看集合的修改方法——

①添加新元素
【语法】:集合.add(元素),将指定元素添加到集合内
结果:结合本身被修改,添加了新元素
②移除元素
【语法】:集合.remove(元素),将指定元素,从集合内移除
结果:集合本身被修改,移除了元素
③随机取出元素
【语法】:集合.pop(),从集合中随机取出一个元素
结果:会得到一个元素的结果,同时集合本身被修改,元素被移除
④清空集合
【语法】:集合.clear(),清空集合
结果:集合本身被清空
⑤取出两个集合的差集
【语法】:集合1.difference(集合2),取出集合1和集合2的差集(集合1有二集合2没有的)
结果:得到一个新集合,集合1和集合2不变
⑥消除差集
【语法】:集合1.difference_update(集合2),对比集合1和集合2相同的元素
结果::集合1被修改,集合2不变
⑦两个集合合并
【语法】:集合1.union(集合2),将集合1和集合2组合成新集合
结果:得到新集合,集合1和集合2不变
【代码示例】
# 添加新元素
my_set = {"blue", "green", "pink"}
my_set.add("purple")
my_set.add("pink")
print(f"my_set添加元素后结果是:{my_set}")# 移除元素
my_set.remove("green")
print(f"my_set移除green后,结果是:{my_set}")# 随机取出元素
my_set.pop()
print(f"my_set随机取出元素后,结果是:{my_set}")# 清空集合
my_set.clear()
print(f"my_set清空集合后,结果是:{my_set}")# 取两个集合的差集
set1 = {1,2,3}
set2 = {1,4,5,6}
set3 = set1.difference(set2)
print(f"取差集后,原有set1的内容:{set1}")
print(f"取差集后,原有set2的内容:{set2}")# 消除差集
set1 = {1,2,3}
set2 = {1,4,5,6}
set3 = set1.difference_update(set2)
print(f"消除差集后,原有set1的内容:{set1}")
print(f"消除差集后,原有set2的内容:{set2}")
print(f"消除差集后的集合3是:{set3}")# 两个集合合并
set1 = {1,2,3}
set2 = {1,4,5,6}
set3 = set1.union(set2)
print(f"合并后,原有set1的内容:{set1}")
print(f"合并后,原有set2的内容:{set2}")
print(f"合并后的集合3是:{set3}")# 统计集合的元素数量
set1 = {1,2,3}
set2 = {1,2,3,1,2,3}
num1 = len(set1)
num2 = len(set2)
print(f"集合1内的元素数量有:{num1}个")
print(f"集合2内的元素数量有:{num2}个")'''运行结果:
my_set添加元素后结果是:{'pink', 'purple', 'green', 'blue'}
my_set移除green后,结果是:{'pink', 'purple', 'blue'}
my_set随机取出元素后,结果是:{'purple', 'blue'}
my_set清空集合后,结果是:set()
取差集后,原有set1的内容:{1, 2, 3}
取差集后,原有set2的内容:{1, 4, 5, 6}
消除差集后,原有set1的内容:{2, 3}
消除差集后,原有set2的内容:{1, 4, 5, 6}
消除差集后的集合3是:None
合并后,原有set1的内容:{1, 2, 3}
合并后,原有set2的内容:{1, 4, 5, 6}
合并后的集合3是:{1, 2, 3, 4, 5, 6}
集合1内的元素数量有:3个
集合2内的元素数量有:3个'''
集合的遍历
因为集合是无序的,不支持下标索引,所以不可以使用while循环遍历,用for循环遍历
# 集合的遍历
set1 = {1,2,3,4,5}
for element in set1:print(f"集合的元素有:{element}")'''运行结果:
集合的元素有:1
集合的元素有:2
集合的元素有:3
集合的元素有:4
集合的元素有:5'''
总结集合的特点
• 可以容纳多个数据
• 可以容纳不同类型的数据(混装)
• 数据是无序存储的(不支持下标索引)
• 不允许重复数据存在
• 可以修改 (增加或删除元素等)
• 支持for循环
三.dict字典
定义
通过 key 找出对应的 value

qa4tRBmD-1736684061659)
字典的定义,同样使用{},不过存储的元素是一个个的:键值对:key,:,value三者结合被称为键值对,如下语法:
# 定义字典字面量
{key : value , key value : value ,....,key : value}
# 定义字典字面量
my_dict = {key : value , key :value , ....,key :value}
# 定义空字典
my_dict = {} # 空字典定义方式1
my_dict = dict() # 空字典定义方式2
• 使用 {} 存储原始,每一个元素是一个键值对
• 每一个键值对包含 Key 和 Value (用冒号分隔)
• 键值对之间使用逗号分隔
• Key 和 Value 可以是任意类型的数据( key 不可为字典)
• Key 不可重复,重复会对原有数据覆盖
•字典不可用下标索引,而是通过Key检索Value
【代码示例】
# 定义字典
my_dict1 = {"王力鸿": 99, "周杰轮": 88, "林俊节": 77}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict1}, 类型:{type(my_dict1)}")
print(f"字典2的内容是:{my_dict2}, 类型:{type(my_dict2)}")
print(f"字典3的内容是:{my_dict3}, 类型:{type(my_dict3)}")'''运行结果:
字典1的内容是:{'王力鸿': 99, '周杰轮': 88, '林俊节': 77}, 类型:<class 'dict'>
字典2的内容是:{}, 类型:<class 'dict'>
字典3的内容是:{}, 类型:<class 'dict'>'''
常用操作
字典同集合一样,不可以使用下标索引
但是字典可以通过Key值来取得对应的Value
【代码示例】
# 从字典中基于Key获取Value
my_dict1 = {"王力鸿": 99, "周杰轮": 88, "林俊节": 77}
score = my_dict1["王力鸿"]
print(f"王力鸿的考试分数是:{score}")
score = my_dict1["周杰轮"]
print(f"周杰轮的考试分数是:{score}")'''运行结果:
王力鸿的考试分数是:99
周杰轮的考试分数是:88'''

①新增元素
【语法】:字典[Key] = Value
结果:字典被修改,新增了元素
②更新元素
【语法】:字典[Key] = Value
结果:字典被修改,元素被更新
注意:字典Key不可以重复,所以对已存在的Key执行上述操作,就是更新Value值
③删除元素
【语法】:字典.pop(Key)
结果:获得指定Key的Value,同时字典被修改,指定Key的数据被删除
④清空字典
【语法】:字典.clear()
结果:字典被修改,元素被清空
⑤获取全部Key
【语法】:字典.Keys()
结果:得到字典中全部的Key
⑥计算字典中元素数量
【语法】:len.(字典)
【代码示例】
# 从字典中基于Key获取Value
my_dict = {"王力鸿": 99, "周杰轮": 88, "林俊节": 77}
score = my_dict["王力鸿"]
print(f"王力鸿的考试分数是:{score}")
score = my_dict["周杰轮"]
print(f"周杰轮的考试分数是:{score}")# 新增元素
my_dict["张信哲"] = 66
print(f"字典经过新增元素后,结果:{my_dict}")
#更新元素
my_dict["周杰轮"] = 33
print(f"字典经过更新后,结果:{my_dict}")# 删除元素
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
score = my_dict.pop("周杰轮")
print(f"字典中被移除了一个元素,结果:{my_dict}, 周杰轮的考试分数是:{score}")# 清空字典
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
my_dict.clear()
print(f"字典被清空了,内容是:{my_dict}")# 获取字典中全部的Key
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
keys = my_dict.keys()
print(f"字典的全部keys是:{keys}")
# 遍历字典
# 方式1:通过获取到全部的key来完成遍历
for key in keys:print(f"字典的key是:{key}")print(f"字典的value是:{my_dict[key]}")# 计算字典中的元素数量
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
num = len(my_dict)
print(f"字典中的元素数量有:{num}个")'''运行结果:
王力鸿的考试分数是:99
周杰轮的考试分数是:88
字典经过新增元素后,结果:{'王力鸿': 99, '周杰轮': 88, '林俊节': 77, '张信哲': 66}
字典经过更新后,结果:{'王力鸿': 99, '周杰轮': 33, '林俊节': 77, '张信哲': 66}
字典中被移除了一个元素,结果:{'林俊节': 88, '张学油': 77}, 周杰轮的考试分数是:99
字典被清空了,内容是:{}
字典的全部keys是:dict_keys(['周杰轮', '林俊节', '张学油'])
字典的key是:周杰轮
字典的value是:99
字典的key是:林俊节
字典的value是:88
字典的key是:张学油
字典的value是:77
字典中的元素数量有:3个
'''
字典的嵌套
字典的Key和Value可以是任意数据类型(Key不可为字典)
那么,就表明,字典是可以嵌套的。
方法①:通过获取到全部的key来遍历完成
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
keys = my_dict.keys()
print(f"字典的全部keys是:{keys}")
# 遍历字典
# 方式1:通过获取到全部的key来完成遍历
for key in keys:print(f"字典的key是:{key}")print(f"字典的value是:{my_dict[key]}")'''运行结果:
字典的全部keys是:dict_keys(['周杰轮', '林俊节', '张学油'])
字典的key是:周杰轮
字典的value是:99
字典的key是:林俊节
字典的value是:88
字典的key是:张学油
字典的value是:77
'''
方法②:直接对字典进行for循环,每一次循环都是直接得到key
my_dict = {"周杰轮": 99, "林俊节": 88, "张学油": 77}
for key in my_dict:print(f"字典的key是:{key}")print(f"字典的value是:{my_dict[key]}")'''运行结果:
字典的key是:周杰轮
字典的value是:99
字典的key是:林俊节
字典的value是:88
字典的key是:张学油
字典的value是:77
'''
总结字典的特点
• 可以容纳多个数据
• 可以容纳不同类型的数据
• 每一份数据是 KeyValue 键值对
• 可以通过 Key 获取到 Value , Key 不可重复(重复会覆盖)
• 不支持下标索引
• 可以修改 (增加或删除更新元素等)
• 支持for循环,不支持 while 循环
*数据容器对比总结

• 列表使用: []
• 元组使用: ()
• 字符串使用:“”
• 集合使用: {}
•字典使用:{}和键值对
遍历方式不同:
- 5类数据容器都支持for循环遍历
- 列表,元组,字符串支持while循环,集合,字典不支持(无法下标索引)
四.数据容器的通用操作
4.1通用统计功能

【代码示例】
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
my_str = "abcdefg"
my_set = {1, 2, 3, 4, 5}
my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}# len元素个数
print(f"列表 元素个数有:{len(my_list)}")
print(f"元组 元素个数有:{len(my_tuple)}")
print(f"字符串元素个数有:{len(my_str)}")
print(f"集合 元素个数有:{len(my_set)}")
print(f"字典 元素个数有:{len(my_dict)}")# max最大元素
print(f"列表 最大的元素是:{max(my_list)}")
print(f"元组 最大的元素是:{max(my_tuple)}")
print(f"字符串最大的元素是:{max(my_str)}")
print(f"集合 最大的元素是:{max(my_set)}")
print(f"字典 最大的元素是:{max(my_dict)}")# min最小元素
print(f"列表 最小的元素是:{min(my_list)}")
print(f"元组 最小的元素是:{min(my_tuple)}")
print(f"字符串最小的元素是:{min(my_str)}")
print(f"集合 最小的元素是:{min(my_set)}")
print(f"字典 最小的元素是:{min(my_dict)}")'''运行结果:
列表 元素个数有:5
元组 元素个数有:5
字符串元素个数有:7
集合 元素个数有:5
字典 元素个数有:5
列表 最大的元素是:5
元组 最大的元素是:5
字符串最大的元素是:g
集合 最大的元素是:5
字典 最大的元素是:key5
列表 最小的元素是:1
元组 最小的元素是:1
字符串最小的元素是:a
集合 最小的元素是:1
字典 最小的元素是:key1'''
4.2通用转换功能

【代码示例】
my_list = [1, 2, 3, 4, 5]
my_tuple = (1, 2, 3, 4, 5)
my_str = "abcdefg"
my_set = {1, 2, 3, 4, 5}
my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}# 类型转换: 容器转列表
print(f"元组转列表的结果是:{list(my_tuple)}")
print(f"字符串转列表结果是:{list(my_str)}")
print(f"集合转列表的结果是:{list(my_set)}")
print(f"字典转列表的结果是:{list(my_dict)}")# 类型转换: 容器转元组
print(f"列表转元组的结果是:{tuple(my_list)}")
print(f"字符串转元组结果是:{tuple(my_str)}")
print(f"集合转元组的结果是:{tuple(my_set)}")
print(f"字典转元组的结果是:{tuple(my_dict)}")# 类型转换: 容器转字符串
print(f"列表转字符串的结果是:{str(my_list)}")
print(f"元组转字符串的结果是:{str(my_tuple)}")
print(f"集合转字符串的结果是:{str(my_set)}")
print(f"字典转字符串的结果是:{str(my_dict)}")# 类型转换: 容器转集合
print(f"列表转集合的结果是:{set(my_list)}")
print(f"元组转集合的结果是:{set(my_tuple)}")
print(f"字符串转集合结果是:{set(my_str)}")
print(f"字典转集合的结果是:{set(my_dict)}")'''运行结果:
元组转列表的结果是:[1, 2, 3, 4, 5]
字符串转列表结果是:['a', 'b', 'c', 'd', 'e', 'f', 'g']
集合转列表的结果是:[1, 2, 3, 4, 5]
字典转列表的结果是:['key1', 'key2', 'key3', 'key4', 'key5']
列表转元组的结果是:(1, 2, 3, 4, 5)
字符串转元组结果是:('a', 'b', 'c', 'd', 'e', 'f', 'g')
集合转元组的结果是:(1, 2, 3, 4, 5)
字典转元组的结果是:('key1', 'key2', 'key3', 'key4', 'key5')
列表转字符串的结果是:[1, 2, 3, 4, 5]
元组转字符串的结果是:(1, 2, 3, 4, 5)
集合转字符串的结果是:{1, 2, 3, 4, 5}
字典转字符串的结果是:{'key1': 1, 'key2': 2, 'key3': 3, 'key4': 4, 'key5': 5}
列表转集合的结果是:{1, 2, 3, 4, 5}
元组转集合的结果是:{1, 2, 3, 4, 5}
字符串转集合结果是:{'c', 'b', 'd', 'a', 'f', 'e', 'g'}
字典转集合的结果是:{'key1', 'key5', 'key2', 'key3', 'key4'}
'''
4.3通用排序功能

【语法】:sorted(容器,[reverse = True]),将给定的容器进行排序
# 进行容器的排序
my_list = [3, 1, 2, 5, 4]
my_tuple = (3, 1, 2, 5, 4)
my_str = "bdcefga"
my_set = {3, 1, 2, 5, 4}
my_dict = {"key3": 1, "key1": 2, "key2": 3, "key5": 4, "key4": 5}# 正序排序
print(f"列表对象的排序结果:{sorted(my_list)}")
print(f"元组对象的排序结果:{sorted(my_tuple)}")
print(f"字符串对象的排序结果:{sorted(my_str)}")
print(f"集合对象的排序结果:{sorted(my_set)}")
print(f"字典对象的排序结果:{sorted(my_dict)}")# 逆序排序
print(f"列表对象的反向排序结果:{sorted(my_list, reverse=True)}")
print(f"元组对象的反向排序结果:{sorted(my_tuple, reverse=True)}")
print(f"字符串对象反向的排序结果:{sorted(my_str, reverse=True)}")
print(f"集合对象的反向排序结果:{sorted(my_set, reverse=True)}")
print(f"字典对象的反向排序结果:{sorted(my_dict, reverse=True)}")'''运行结果:
列表对象的排序结果:[1, 2, 3, 4, 5]
元组对象的排序结果:[1, 2, 3, 4, 5]
字符串对象的排序结果:['a', 'b', 'c', 'd', 'e', 'f', 'g']
集合对象的排序结果:[1, 2, 3, 4, 5]
字典对象的排序结果:['key1', 'key2', 'key3', 'key4', 'key5']
列表对象的反向排序结果:[5, 4, 3, 2, 1]
元组对象的反向排序结果:[5, 4, 3, 2, 1]
字符串对象反向的排序结果:['g', 'f', 'e', 'd', 'c', 'b', 'a']
集合对象的反向排序结果:[5, 4, 3, 2, 1]
字典对象的反向排序结果:['key5', 'key4', 'key3', 'key2', 'key1']
'''
相关文章:
【Python】数据容器:列表,元组,字符串,集合字典及通用操作
文章目录 一.序列1.1list列表定义常用操作列表的遍历 1.2tuple元组定义常见操作元组的遍历 1.3str字符串定义常见操作字符串的遍历 1.4序列常用操作——切片 二.set集合定义常见操作集合的遍历 三.dict字典定义常用操作字典的嵌套 *数据容器对比总结四.数据容器的通用操作4.1通…...
基于Oracle与PyQt6的电子病历多模态大模型图形化查询系统编程构建
一、引言 1.1 研究背景阐述 在当今数字化时代,医疗行业正经历着深刻的变革,数字化转型的需求日益迫切。电子病历(EMR)作为医疗信息化的核心,其管理的高效性和数据利用的深度对于提升医疗服务质量、优化临床决策以及推动医学研究具有至关重要的意义。传统的电子病历管理系…...
2025智能网联汽车数据分类分级白皮书
智能网联汽车作为现代交通技术的重要成果,其核心特征之一是产生了大量的、多样化的数据,这些数据不仅对提升车辆性能和用户体验至关重要,对维护交通安全、推动智能交通系统的发展具有深远影响。在数字经济时代,数据的价值日益凸显…...
使用Dify创建个问卷调查的工作流
为啥要使用Dify创建工作流呢?一个基于流程的智能体的实现,特别是基于业务的实现,使用Dify去实现时,通常都是一个对话工作流,当设计到相对复杂一些的流程时,如果将所有逻辑都放在对话工作流中去实现…...
紫光无人机AI飞控平台介绍
随着无人机技术的迅猛发展,无人机飞控平台的智能化需求不断提升。紫光无人机AI飞控平台作为一款创新型产品,为用户提供了从飞行控制到任务管理的一站式解决方案,尤其在AI实时识别和事件分析方面具有显著优势。本文将介绍平台的核心功能、技术…...
UI自动化测试:异常截图和page_source
自动化测试过程中,是否遇到过脚本执行中途出错却不知道原因的情况?测试人员面临的不仅是问题的复现,还有对错误的快速定位和分析。而异常截图与页面源码(Page Source)的结合,正是解决这一难题的利器。 在实…...
47,【5】BUUCTF web lovesql
进入靶场 可知是单引号闭合,属于字符串型注入 则后续方法与字符串型无异 使用order by 判断出字节数为3 使用union select寻找注入点时切记第一个select为空 库名geek 表名group_concat(table_name) from information_schema.tables where table_schemageek# geek…...
网络安全——常用语及linux系统
一、网络安全概念及法规 网络安全:网络空间安全 cyber security 信息系统:由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的已处理信息流为目的的人机一体化系统 信息系统安全三要素(CIA) 保密…...
json().get() 和 json[““] 的区别
以下是 json().get() 和 json[“”] 的区别: 使用方法和语法 json[“”]: 这是使用字典的索引操作符 [] 来访问 JSON 数据。假设 json 是一个字典,你可以通过 json[“key”] 的方式来获取对应 key 的值。 示例: python import js…...
深入解析CSS属性值计算:从声明到渲染的完整流程
目录 引言1. 确定声明值2. 层叠冲突3. 使用继承4. 使用默认值总结 引言 在网页开发中,理解CSS属性值的计算过程对于开发者来说至关重要。它不仅影响页面样式的最终呈现,还涉及到浏览器如何解析和应用样式规则。本文将深入探讨从无属性值到每个属性都有…...
npm发布工具包+使用
1.初始化package包 npm init -y {"name": "common-cjs-tools","version": "1.0.0","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" &&…...
28:CAN总线入门一:CAN的基本介绍
CAN总线入门 1、CAN总线简介和硬件电路1.1、CAN简要介绍1.2、硬件电路1.3、CAN总线的电平标准 2、帧格式2.1、数据帧(掌握)2.2、遥控帧(掌握)2.3、错误帧(了解)2.4、过载帧(了解)2.5…...
RK3568平台(音频篇)lineout无声调试
一.声音硬件框架 硬件HP_MUTE已强制拉低。 二.设备树配置 es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card";rockchip,card-name = "rockchip-es8388";hp-det-gpio = <&gpio1 RK_PD2 GPIO_ACT…...
ros2-7.5 做一个自动巡检机器人
7.5.1 需求及设计 又到了小鱼老师带着做最佳实践项目了。需求:做一个在各个房间不断巡逻并记录图像的机器人。 到达目标点后首先通过语音播放到达目标点信息, 再通过摄像头拍摄一张图片保存到本地。 7.5.2 编写巡检控制节点 在chapt7_ws/src下新建功…...
服务器下发任务镭速利用变量实现高效的大文件传输效率
在分布式系统和自动化部署场景中,任务下发往往伴随着大量的文件传输需求。为了提高文件传输的效率,本文将介绍如何巧妙地利用变量来优化任务下发过程中的文件传输。我们将介绍几种方法,通过合理利用变量来减少传输负担、提升传输速度…...
本地用docker装mysql
目录 拉取镜像查看镜像 启动容器查看运行中的容器连接到 MySQL 容器其他一些操作 装WorkBench链接mysql——————————————允许远程登录MySql 拉取镜像 docker pull mysql查看镜像 docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE mysq…...
前端canvas对象转成file对象
import html2canvas from html2canvasexport default {methods: {//canvas对象转成file对象canvasToFile() {html2canvas(this.$parent.$refs[mapPanel].$el,{width: this.$parent.$refs[mapPanel].$el.clientWidth - 600// height:}).then(canvas > {const base64Data can…...
mermaid大全(语法、流程图、时序图、甘特图、饼图、用户旅行图、类图)
⚠️ 有些网站的mermaid可能不完整,因此下面教程中可能有些语法是无效的。 😊亲测Typora软件均可以显示。 1. 介绍 Mermaid是一个基于JavaScript的图表绘制工具,它使用类似Markdown的语法来创建和修改各种类型的图表。以下是关于Mermaid的详…...
运行fastGPT 第四步 配置ONE API 添加模型
上次已经装好了所有的依赖和程序。 下面在网页中配置One API ,这个是大模型的接口。配置好了之后,就可以配置fastGPT了。 打开 OneAPI 页面 添加模型 这里要添加具体的付费模型的API接口填进来。 可以通过ip:3001访问OneAPI后台,**默认账号…...
Spring Initializr创建springboot项目 “java: 错误: 无效的源发行版:19”
我用的1.8的jdk,排查发现这是jdk和springboot版本冲突导致的。 1、File->Project Structure->Project Settings->Project,把language level改成相应的版本 2、File->Project Structure->Module,source和dependancies改成相应的版本 3、F…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
