Python 中可使用list()函数转换的数据类型 - 第一章-优快云博客文章浏览阅读764次,点赞22次,收藏4次。本文介绍了 Python 中 list() 函数的原理及其应用。list() 基于迭代协议,可将集合、元组和字符串等可迭代对象转换为列表。集合转换后顺序可能变化,元组转换为可变列表,字符串则拆分为字符列表。通过 type() 和 list() 函数,可实现类型检查与数据结构转换,满足多种编程需求。https://blog.youkuaiyun.com/HaoChenbest/article/details/146416750 在上一章中,我们已经详细探讨了 Python 中可以使用 list() 函数转换的几种数据类型,包括集合(set)、元组(tuple)和字符串(str)。接下来,本文将继续深入分析 list() 函数还可以转换的其他几种数据类型。
知识点:可转换为列表的数据类型
1. 字典(dict)
字典本身不能直接被list() 转换为包含键值对的列表,但可以转换为键的列表、值的列表或键值对的列表(键值对以元组形式出现)。
案例1

-
当你对字典使用list() 函数时,它会提取字典的键,并将这些键组成一个列表。
-
字典的键是唯一的,因此生成的列表中不会包含重复的元素。
-
生成的列表中键的顺序取决于字典的插入顺序(在 Python 3.7 及以上版本中,字典是有序的,会按照插入顺序排列键)。
案例2

-
a.values() 返回一个包含字典中所有值的视图对象。
-
使用 list() 函数将这个视图对象转换为一个列表。
-
列表中的值是字典中键对应的值,顺序与字典的键值对插入顺序一致(在 Python 3.7 及以上版本中)。
小结:
1. list(a):提取字典的键(keys)
2. list(a.values()):提取字典的值(values)
-
键(keys):字典的键是唯一的,它们是字典的“索引”,用于访问对应的值。键通常是字符串或其他不可变类型。
-
值(values):字典的值是与键对应的存储数据,可以是任意类型(包括数字、字符串、列表等),并且值可以重复。
因此,list(a) 和 list(a.values()) 的输出结果不同,是因为它们分别提取了字典的键和值。
案例3

转换字典的键值对为列表
-
a.items():返回一个动态视图对象,包含字典中所有的键值对,每个键值对是一个元组 (key, value)。 -
list(a.items()):将这个动态视图对象转换为一个列表,列表中的每个元素是一个元组,表示字典中的一个键值对。 -
输出:[('hi', 1), ('hello', 2), ('world', 3)]。
找出同时作为键和值的元素
-
a.keys():返回一个动态视图对象,包含字典中所有的键。 -
a.values():返回一个动态视图对象,包含字典中所有的值。 -
a.keys() & a.values():尝试对两个视图对象进行集合交集操作。& 是集合的交集运算符,用于找出两个集合中共同的元素。 -
list(a.keys() & a.values()):将交集结果转换为列表。
关键点解释
-
在字典a = {"hi": 1, "hello": 2, "world": 3} 中,键是 ["hi", "hello", "world"],值是[1, 2, 3]。
-
键和值的类型不同(键是字符串,值是整数),因此它们之间没有共同的元素。
-
因此,a.keys() & a.values() 的结果是一个空集合,转换为列表后结果为[]
值的视图对象”(dict_values 对象)
1. 值的视图对象的特性
-
动态更新:dict_values 对象是一个动态视图,它会随着字典内容的变化而自动更新。这意味着如果你修改了字典(例如添加、删除或修改键值对),dict_values 对象的内容也会相应地改变。
-
不可直接修改:虽然 dict_values 对象会自动更新,但它本身是不可直接修改的。你不能直接对 dict_values 对象进行添加、删除或修改操作。
-
可迭代:dict_values 对象是一个可迭代对象,可以使用 for 循环遍历其中的值。
案例1

-
修改字典:
-
通过a["python"] = 6,向字典
a中添加了一个新的键值对 "python": 6。 -
字典a 的内容现在变为{"hi": 1, "hello": 2, "world": 3, "python": 6}。
-
-
再次调用
a.values():-
a.values() 返回一个动态视图对象,它会自动更新以反映字典的当前状态。
-
现在视图对象包含 [1, 2, 3, 6]。
-
-
转换为列表:
-
使用list(a.values()) 将动态视图对象转换为列表 list(a.values())
-
-
输出:[1, 2, 3, 6]。
小结
-
a.values():返回一个动态视图对象,包含字典中所有值。 -
list(a.values()):将动态视图对象转换为一个列表。 -
修改字典:通过a["python"] = 6,向字典中添加新的键值对,字典的内容被更新。
-
动态更新:由于a.values() 是动态的,它会自动反映字典的最新状态,因此转换后的列表也会包含新的值。
额外补充:为什么 a["python"] = 6 能修改字典内容?
在 Python 中,字典通过键(key)来访问和修改其值(value)。a["python"] = 6 的操作可以分为两部分理解:
-
a["python"]:-
这表示访问字典 a 中键为 "python" 的值。
-
如果键 "python" 已经存在于字典中,那么它会返回对应的值。
-
如果键 "python"不存在于字典中,那么它会创建一个新的键。
-
-
= 6:-
这表示将键 "python" 对应的值设置为
6。 -
如果键 "python"已经存在,那么它的值会被更新为 6。
-
如果键"python"不存在,那么会向字典中添加一个新的键值对 "python"
: 6。
-
因此,a["python"] = 6 既可以用来更新已有的键值对,也可以用来添加新的键值对。
除了这种方式,还可以使用 update()、del、pop() 和 clear() 等方法来修改字典的内容。
2. dict_values与列表的区别
虽然 dict_values 对象和列表都可以存储多个值,但它们有以下主要区别:
-
动态性:dict_values 是动态的,会随着字典的变化而自动更新;而列表是静态的,不会自动更新。
-
不可修改性:dict_values 对象本身是不可直接修改的;而列表是可以直接修改的。
-
用途:dict_values 主要用于查看字典的值,而列表是一个通用的数据结构,可以用于存储任意类型的元素。
3. 为什么需要值的视图对象(dict_values)
dict_values 对象的主要用途是提供一种高效的方式来访问字典中的值,同时保持与字典的动态关联。这使得在处理字典时,可以避免频繁地复制值,从而提高性能和内存效率。
总结
-
值的视图对象(dict_values)是一个动态的、与字典紧密关联的视图,用于访问字典中的值。
-
它会随着字典内容的变化而自动更新,但本身不可直接修改。
-
通过将 dict_values 对象转换为列表或直接迭代,可以方便地使用字典中的值。
12万+

被折叠的 条评论
为什么被折叠?



