以下是结合Python字典章节知识,对这三个例题讲解的补充
以下是结合Python字典章节知识,对这三个例题讲解的补充:

例1:电话号码查询系统
- Python实现:在Python中,我们可以使用字典来轻松实现这个电话号码查询系统。字典是一种键值对(key - value)的数据结构,正好对应这里的姓名(键)和电话号码(值)。示例代码如下:
phone_book = {
"陈海": "13612345588",
"李四锋": "13056112345"
}
# 查询陈海的电话号码
name = "陈海"
if name in phone_book:
print(f"{name}的电话号码是{phone_book[name]}")
else:
print(f"未找到{name}的电话号码")
- 字典优势:相比于其他数据结构,使用字典查询效率高,时间复杂度平均为O(1) 。因为Python的字典内部采用哈希表实现,只要哈希函数均匀,查找操作可以快速定位到目标键值对,不像线性表如果要查找元素,在最坏情况下时间复杂度为O(n) ,需要逐个遍历。
- 拓展应用:实际应用中,我们还可以对这个字典进行增删改操作。比如添加新联系人:
phone_book["张三"] = "15900001234";修改联系人电话:phone_book["陈海"] = "13612345599";删除联系人:del phone_book["李四锋"]。

例2:磁盘目录文件系统
- Python模拟实现:我们可以用嵌套字典来模拟磁盘目录文件系统。外层字典的键可以是文件夹名,值可以是另一个字典(代表子文件夹和文件)或者具体文件内容(如果是文件的话)。示例代码如下:
disk_system = {
"root": {
"folder1": {
"file1": "content of file1",
"subfolder1": {}
},
"folder2": {
"file2": "content of file2"
}
}
}
# 访问folder1下的file1内容
print(disk_system["root"]["folder1"]["file1"])
- 字典嵌套原理:这里利用字典嵌套来体现树形结构的层级关系。每一个子文件夹就像是一个子字典,通过键来访问其中的内容,就如同在磁盘目录中通过文件夹名和文件名来访问文件一样。这种方式很好地模拟了树形结构中一对多的关系,一个父节点(文件夹)可以有多个子节点(子文件夹和文件)。
- 遍历操作:在Python中,我们可以使用递归函数来遍历这个嵌套字典,就像在实际磁盘目录中遍历所有文件和文件夹一样。例如:
def traverse_disk(disk, indent=""):
for key, value in disk.items():
print(indent + key)
if isinstance(value, dict):
traverse_disk(value, indent + " ")
traverse_disk(disk_system)

例3:交通网络图
- 使用字典表示图结构:在Python中,可以使用字典来表示图这种网状结构。例如,以城市为节点,城市之间的连接关系为边,可以这样表示:
traffic_network = {
"佛山": ["广州", "中山"],
"广州": ["佛山", "东莞", "惠州"],
"中山": ["佛山", "珠海", "东莞"],
"珠海": ["中山"],
"东莞": ["广州", "中山", "深圳", "惠州"],
"深圳": ["东莞"],
"惠州": ["广州", "东莞"]
}
这里字典的键是城市名,值是一个列表,列表中包含与该城市直接相连的城市。
- 路径查找算法结合字典:如果要查找从一个城市到另一个城市的路径,可以结合图的搜索算法(如广度优先搜索BFS或深度优先搜索DFS ),利用这个字典来实现。以BFS为例,代码如下:
from collections import deque
def bfs_path(start, end, graph):
queue = deque([(start, [start])])
visited = set()
while queue:
(node, path) = queue.popleft()
if node not in visited:
if node == end:
return path
visited.add(node)
for neighbor in graph[node]:
if neighbor not in visited:
queue.append((neighbor, path + [neighbor]))
return None
start_city = "佛山"
end_city = "深圳"
path = bfs_path(start_city, end_city, traffic_network)
if path:
print(f"从{start_city}到{end_city}的路径是: {path}")
else:
print(f"未找到从{start_city}到{end_city}的路径")
- 字典表示图的优势与不足:优势在于直观且易于实现和修改,添加或删除城市以及它们之间的连接关系很方便。不足是对于大规模图,在进行复杂操作(如最短路径计算等)时,可能效率不高,此时可以考虑使用更专业的图数据结构库(如NetworkX ),但基本的数据存储和表示思路还是类似的,都是通过节点和边的关系来构建。

浙公网安备 33010602011771号