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

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

例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["李四锋"]

image

例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)

image

例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 ),但基本的数据存储和表示思路还是类似的,都是通过节点和边的关系来构建。
posted @ 2025-04-09 21:45  kkman2000  阅读(19)  评论(0)    收藏  举报