Python 散列类型:数据索引与处理的智慧密钥
目录
(二)散列类型在 Python 中的体现:字典(dict)和集合(set)
一、散列类型简介
在 Python 中,散列类型是一种非常重要的数据结构。它主要基于散列函数,能够将键(key)映射到特定的值(value),就像是给每个数据都贴上了一个独一无二的标签,通过这个标签就能快速地找到对应的数据。
(一)散列函数的概念
- 散列函数是散列类型的核心。它接收一个输入(通常是键),然后通过一系列复杂的计算,输出一个固定长度的散列值。这个散列值就像是数据的 “指纹”,用于在散列表中确定数据的存储位置。
- 例如,一个简单的散列函数可能会将字符串中的每个字符的 ASCII 码相加,然后对一个固定的数取模,得到一个散列值。
(二)散列类型在 Python 中的体现:字典(dict)和集合(set)
- 字典(dict)
- 字典是 Python 中最常用的散列类型之一。它由键 - 值对(key - value pairs)组成,其中键是唯一的,用于快速查找与之对应的键。
- 例如,我们可以创建一个存储学生信息的字典:
student_info = {
"name": "Alice",
"age": 20,
"major": "Computer Science"
}
- 在这里,
"name"
、"age"
、"major"
是键,"Alice"
、20
、"Computer Science"
是相应的值。通过键,我们可以快速地获取对应的值,如student_info["name"]
就会返回"Alice"
。 - 集合(set)
- 集合是一种无序的、不包含重复元素的散列类型。它主要用于快速检查元素是否存在于集合中,以及进行集合运算(如并集、交集、差集等)。
- 例如,创建一个包含一些水果名称的集合:
fruits = {"apple", "banana", "cherry"}
- 我们可以快速检查一个水果是否在这个集合中,如
"apple" in fruits
会返回True
。
二、字典(dict)的详细介绍
(一)字典的创建与基本操作
- 创建字典
- 除了前面提到的直接使用花括号
{}
来创建字典外,还可以使用dict()
函数来创建。 - 例如:
- 除了前面提到的直接使用花括号
# 使用dict()函数创建字典
new_dict = dict([("key1", "value1"), ("key2", "value2")])
print(new_dict)
- 上述代码通过一个包含键 - 值对元组的列表来创建字典,输出结果为
{"key1": "value1", "key2": "value2"}
。 - 访问字典中的值
- 通过键来访问字典中的值。如果键不存在,会抛出
KeyError
异常。 - 例如:
- 通过键来访问字典中的值。如果键不存在,会抛出
my_dict = {"a": 1, "b": 2}
print(my_dict["a"])
- 输出为
1
。为了避免KeyError
,可以使用get()
方法。
print(my_dict.get("c", "不存在该键"))
- 这里如果
"c"
键不存在,会返回"不存在该键"
。 - 修改和添加字典中的元素
- 修改字典中的元素很简单,直接通过键重新赋值即可。添加新元素也是同样的操作,如果键不存在,就会添加一个新的键 - 值对。
- 例如:
my_dict = {"a": 1}
my_dict["a"] = 3
# 修改键 "a" 对应的值
my_dict["b"] = 4
# 添加新的键 - 值对
print(my_dict)
- 输出为
{"a": 3, "b": 4}
。
(二)字典的遍历
- 遍历键
- 可以使用
for
循环直接遍历字典的键。 - 例如:
- 可以使用
my_dict = {"a": 1, "b": 2, "c": 3}
for key in my_dict.keys():
print(key)
- 会依次输出
"a"
、"b"
、"c"
。 - 遍历值
- 同样,使用
for
循环遍历字典的值。 - 例如:
- 同样,使用
for value in my_dict.values():
print(value)
- 会依次输出
1
、2
、3
。 - 遍历键 - 值对
- 使用
for
循环遍历字典的键 - 值对。 - 例如:
- 使用
for key, value in my_dict.items():
print(key, value)
- 会依次输出
("a", 1)
、("b", 2)
、("c", 3)
。
三、集合(set)的详细介绍
(一)集合的创建与基本操作
- 创建集合
- 可以使用花括号
{}
或者set()
函数来创建集合。但是使用花括号创建空集合是不行的,因为{}
会被认为是一个空字典。 - 例如:
- 可以使用花括号
# 使用花括号创建集合
fruits1 = {"apple", "banana", "cherry"}
# 使用set()函数创建集合
fruits2 = set(["apple", "banana", "cherry"])
print(fruits1 == fruits2)
- 输出为
True
,说明两种创建方式是等价的。 - 添加和删除元素
- 向集合中添加元素可以使用
add()
方法,删除元素可以使用remove()
或discard()
方法。remove()
方法在元素不存在时会抛出KeyError
,而discard()
方法不会。 - 例如:
- 向集合中添加元素可以使用
my_set = {"a", "b", "c"}
my_set.add("d")
print(my_set)
my_set.remove("a")
print(my_set)
my_set.discard("e")
print(my_set)
- 输出依次为
{"a", "b", "c", "d"}
、{"b", "c", "d"}
、{"b", "c", "d"}
。
(二)集合运算
- 并集
- 可以使用
|
运算符或者union()
方法来计算两个集合的并集。 - 例如:
- 可以使用
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2)
print(set1.union(set2))
- 输出都是
{1, 2, 3, 4, 5}
。 - 交集
- 使用
&
运算符或者intersection()
方法来计算两个集合的交集。 - 例如:
- 使用
print(set1 & set2)
print(set1.intersection(set2))
- 输出都是
{3}
。 - 差集
- 使用
-
运算符或者difference()
方法来计算两个集合的差集。 - 例如:
- 使用
print(set1 - set2)
print(set1.difference(set2))
- 输出都是
{1, 2}
。
四、散列类型的应用场景
(一)数据存储与快速查找
- 在处理大量的数据时,如数据库中的用户信息存储。使用字典可以快速地根据用户 ID(键)查找用户的详细信息(值)。
- 例如,在一个用户管理系统中,我们可以创建一个字典来存储用户信息:
users = {
"user1": {"name": "John", "age": 30, "email": "john@example.com"},
"user2": {"name": "Jane", "age": 25, "email": "jane@example.com"}
}
- 当需要查找
user1
的信息时,只需要users["user1"]
就可以快速获取相关信息。
(二)数据去重
- 集合的不重复性使得它在数据去重方面有很大的优势。
- 例如,从一个包含重复元素的列表中获取唯一元素:
my_list = [1, 2, 2, 3, 3, 3]
unique_list = set(my_list)
print(unique_list)
- 输出为
{1, 2, 3}
,实现了数据去重。
(三)缓存机制
- 在一些计算密集型的应用中,为了避免重复计算,可以使用字典作为缓存。
- 例如,计算斐波那契数列:
fib_cache = {}
def fibonacci(n):
if n in fib_cache:
return fib_cache[n]
if n <= 1:
result = n
else:
result = fibonacci(n - 1) + fibonacci(n - 2)
fib_cache[n] = result
return result
- 在这里,
fib_cache
字典用于存储已经计算过的斐波那契数,下次需要计算相同的数时,直接从缓存中获取,提高了计算效率。
五、内置方法(思维导图)
原文地址:https://blog.csdn.net/2301_81718046/article/details/144082416
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!