📅  最后修改于: 2023-12-03 15:19:34.540000             🧑  作者: Mango
哈希映射是计算机科学中常用的一种数据结构,它提供了一种快速查找和插入数据的方法。Python 中的哈希映射就是字典。
Python 中的字典是一种可变的、无序的、键值对 (key-value pairs) 的集合。它通过哈希表 (hash table) 实现,因此具有快速查找和插入的能力。
可以使用花括号 {} 或者 dict() 函数来创建一个字典。字典中的元素以键值对的形式出现,键和值之间使用冒号 (:) 分隔,每个键值对之间使用逗号 (,) 分隔。
示例代码:
# 使用花括号创建字典
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
# 使用 dict() 函数创建字典
person = dict(name='Bob', age=20, gender='M')
可以使用字典名和键来访问字典中的元素。如果键不存在,会抛出 KeyError 异常。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
print(person['name']) # 输出 Bob
print(person['height']) # 抛出 KeyError 异常
访问字典中的键值对直接赋值即可修改元素的值。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
person['age'] = 21 # 将年龄修改为 21
print(person) # 输出 {'name': 'Bob', 'age': 21, 'gender': 'M'}
可以使用字典名和键来添加元素。如果键已经存在,会将原有的值覆盖掉。
示例代码:
person = {'name': 'Bob', 'age': 20}
person['gender'] = 'M' # 添加 gender 键值对
person['height'] = 175 # 添加 height 键值对
person['age'] = 21 # 将年龄修改为 21
print(person) # 输出 {'name': 'Bob', 'age': 21, 'gender': 'M', 'height': 175}
可以使用 del 关键字来删除字典中的键值对。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
del person['gender'] # 删除 gender 键值对
print(person) # 输出 {'name': 'Bob', 'age': 20}
可以使用 for 循环来遍历字典中的元素。默认情况下,for 循环遍历的是字典的键。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
for key in person:
print(key, person[key])
输出:
name Bob
age 20
gender M
如果需要遍历字典的值,可以使用 values() 方法。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
for value in person.values():
print(value)
输出:
Bob
20
M
如果需要遍历字典的键值对,可以使用 items() 方法。
示例代码:
person = {'name': 'Bob', 'age': 20, 'gender': 'M'}
for key, value in person.items():
print(key, value)
输出:
name Bob
age 20
gender M
哈希映射的底层实现是哈希表。哈希表就是数组和链表的混合体。在 Python 中,哈希表底层的实现是通过数组和链表的方式来存储数据。
在哈希表中,数据存储的位置是通过哈希函数计算出来的,而哈希函数的输出值就是数据在数组中的索引。但是,由于数组的长度是有限的,因此可能会出现两个数据需要存储在同一个位置的情况,这就是哈希冲突。
哈希冲突会导致数据存储位置的重复,从而影响查找和插入的效率。为了解决哈希冲突,哈希表使用了链表来进行处理。如果两个数据哈希到了同一个位置,那么这两个数据将被存储在同一个位置的链表上。
在理想情况下,哈希映射的时间复杂度是 O(1)。也就是说,它的查找、插入和删除操作都是常数时间。但是,在最坏情况下,哈希映射的时间复杂度会退化到 O(n),即退化为链表。
在 Python 中,哈希映射的时间复杂度可以通过维护合理的装填因子(load factor)和扩容机制来保持稳定。装填因子是指哈希表中已有元素个数与哈希表长度的比值,扩容机制是指当装填因子达到一定阈值时,会重新分配更大的哈希表。
Python 中的哈希映射就是字典,它提供了一种快速查找和插入数据的方法。哈希映射的底层实现是哈希表,哈希冲突的处理方法是使用链表。通过维护合理的装填因子和扩容机制,可以保持哈希映射的稳定性能。