下面是Python 字典、映射和散列表的完整攻略。
Python字典
Python中的字典是一种无序的键值对数据结构,也称为哈希表或关联数组。它们非常适合存储和快速访问大量的相关数据。
创建字典
下面是创建Python字典的几种方法:
# 空字典
d = {}
# 直接通过键值对创建字典
d = {'apple': 2, 'banana': 3, 'pear': 4}
# 通过dict()函数创建字典
d = dict(apple=2, banana=3, pear=4)
# 通过列表和zip()函数创建字典
keys = ['apple', 'banana', 'pear']
values = [2, 3, 4]
d = dict(zip(keys, values))
print(d) # {'apple': 2, 'banana': 3, 'pear': 4}
访问字典元素
可以使用方括号([])来访问字典中的值,需要在括号中指定键名:
d = {'apple': 2, 'banana': 3, 'pear': 4}
print(d['apple']) # 2
也可以使用get()方法来访问字典中的值。如果指定的键名不存在,则返回None或用户指定的默认值:
d = {'apple': 2, 'banana': 3, 'pear': 4}
print(d.get('apple', 0)) # 2
print(d.get('orange', 0)) # 0
更新字典
可以使用方括号或update方法来更新字典中的值:
d = {'apple': 2, 'banana': 3, 'pear': 4}
# 使用方括号更新值
d['apple'] = 5
# 使用update()方法更新值
d.update({'banana': 6})
print(d) # {'apple': 5, 'banana': 6, 'pear': 4}
删除字典元素
可以使用del关键字来删除字典中的元素:
d = {'apple': 2, 'banana': 3, 'pear': 4}
del d['apple']
print(d) # {'banana': 3, 'pear': 4}
Python映射
Python中的映射是一种通用的键值对数据结构,字典是其中的一种实现。除了字典,Python还支持OrderedDict、Counter和defaultdict等映射类型的实现。
Python散列表
Python中的散列表实际上就是字典类型,它使用哈希函数将键映射到散列表中的一个位置,并将其与值关联。由于哈希函数的优秀性和底层实现机制的巧妙性,散列表可以在常数时间内完成许多基本操作,例如插入、查询和删除等。
示例
下面是一个使用Python字典实现缓存的示例:
class Cache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = {}
def get(self, key):
if key not in self.cache:
return -1
value = self.cache.pop(key)
self.cache[key] = value
return value
def put(self, key, value):
if key in self.cache:
self.cache.pop(key)
elif len(self.cache) >= self.capacity:
self.cache.pop(next(iter(self.cache)))
self.cache[key] = value
这个类表示一个容量为N的缓存,可以进行get和put操作。当缓存满时,会删除掉最近最少使用的元素。这里使用Python字典实现,可以在常数时间内完成get和put操作。
另一个示例是使用Python字典和列表实现一个图的存储和遍历:
class Graph:
def __init__(self):
self.graph = {}
def add_edge(self, u, v):
if u not in self.graph:
self.graph[u] = []
if v not in self.graph:
self.graph[v] = []
self.graph[u].append(v)
self.graph[v].append(u)
def dfs(self, v, visited):
visited.add(v)
print(v)
for neighbor in self.graph[v]:
if neighbor not in visited:
self.dfs(neighbor, visited)
def bfs(self, v):
visited = set()
queue = [v]
while queue:
v = queue.pop(0)
if v not in visited:
visited.add(v)
print(v)
for neighbor in self.graph[v]:
queue.append(neighbor)
这个类表示一个无向图,使用Python字典和列表实现其邻接表存储,可以进行深度优先和广度优先遍历。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python 字典、映射和散列表 - Python技术站