Python “字典” 实战案例:5个项目开发实例
内容摘要
本文包括 5 个使用 Python 字典的综合应用实例。具体是:
- 电影推荐系统
- 配置文件解析器
- 选票统计与排序
- 电话黄页管理系统
- 缓存系统(LRU 缓存)
以上每一个实例均有完整的程序代码以及测试案例,帮助读者快速理解和掌握项目开发相关技术和技巧。
1. 电影推荐系统
功能描述:
实现一个简单的电影推荐系统,根据用户的喜好推荐电影。
代码实现:
# 电影推荐系统
class MovieRecommender:def __init__(self):self.movies = {"Action": ["The Dark Knight", "Inception", "Mad Max: Fury Road"],"Comedy": ["The Hangover", "Superbad", "Step Brothers"],"Drama": ["The Shawshank Redemption", "Forrest Gump", "The Godfather"]}def recommend(self, genre):return self.movies.get(genre, "未找到该类型的电影!")# 测试
recommender = MovieRecommender()
print("动作电影推荐:", recommender.recommend("Action"))
print("科幻电影推荐:", recommender.recommend("Sci-Fi")) # 未找到
2. 配置文件解析器
功能描述:
实现一个配置文件解析器,将配置文件中的键值对解析为字典。
代码实现:
# 配置文件解析器
def config_parser(file_path):config = {}with open(file_path, "r") as file:for line in file:line = line.strip()if line and not line.startswith("#"): # 忽略空行和注释key, value = line.split("=", 1)config[key.strip()] = value.strip()return config# 测试
file_path = "config.txt" # 假设配置文件内容如下:
# host = localhost
# port = 8080
# debug = True
config = config_parser(file_path)
print(config) # 输出: {'host': 'localhost', 'port': '8080', 'debug': 'True'}
3. 选票统计与排序
功能描述:
实现按姓名统计参选人得票数并按得票高低排序。
代码实现
# 统计选票并按得票数排序
def count_votes(votes):# 统计得票数vote_count = {}for candidate in votes:if candidate in vote_count:vote_count[candidate] += 1else:vote_count[candidate] = 1# 按得票数从高到低排序sorted_votes = sorted(vote_count.items(), key=lambda x: x[1], reverse=True)# 将排序结果转换为字典sorted_vote_dict = dict(sorted_votes)return sorted_vote_dict# 测试案例
votes = ["Trump", "Biden", "Roger", "Trump", "Trump", "David", "Biden", "Trump", "Biden", "Roger"
]# 统计并排序
result = count_votes(votes)
print("选票统计结果(按得票数从高到低排序):")
for candidate, count in result.items():print(f"{candidate}: {count} 票")
输出结果
选票统计结果(按得票数从高到低排序):
Trump: 4 票
Biden: 3 票
Roger: 2 票
David: 1 票
代码解析
-
统计得票数:
- 使用字典
vote_count
统计每个参选人的得票数。 - 遍历选票列表
votes
,如果参选人已经在字典中,则得票数加 1;否则,初始化得票数为 1。
- 使用字典
-
按得票数排序:
- 使用
sorted()
函数对字典的键值对进行排序。 key=lambda x: x[1]
表示按值(得票数)排序。reverse=True
表示从高到低排序。
- 使用
-
转换为字典:
- 排序后的结果是一个列表,每个元素是一个元组
(参选人, 得票数)
。 - 使用
dict()
将排序后的列表转换回字典。
- 排序后的结果是一个列表,每个元素是一个元组
-
输出结果:
- 遍历排序后的字典,输出每个参选人的得票数。
4. 电话黄页管理系统
功能描述:
实现一个电话簿管理系统,支持添加联系人、查找联系人、删除联系人和显示所有联系人。
代码实现:
# 电话簿管理系统
class PhoneBookManager:def __init__(self):self.contacts = {}def add_contact(self, name, number):if name in self.contacts:print(f"联系人 {name} 已存在!")else:self.contacts[name] = numberprint(f"联系人 {name} 添加成功!")def find_contact(self, name):return self.contacts.get(name, "联系人不存在")def delete_contact(self, name):if name in self.contacts:del self.contacts[name]print(f"联系人 {name} 已删除!")else:print(f"联系人 {name} 不存在!")def show_all(self):if not self.contacts:print("电话簿为空!")else:print("所有联系人:")for name, number in self.contacts.items():print(f"{name}: {number}")# 测试
phone_book = PhoneBookManager()
phone_book.add_contact("Alice", "123456789")
phone_book.add_contact("Bob", "987654321")
phone_book.delete_contact("Bob")
phone_book.show_all()
5. 缓存系统(LRU 缓存)
功能描述:
实现一个 LRU(最近最少使用)缓存系统,支持添加缓存、获取缓存和限制缓存大小。
代码实现:
from collections import OrderedDict# LRU 缓存系统
class LRUCache:def __init__(self, capacity):self.cache = OrderedDict()self.capacity = capacitydef get(self, key):if key not in self.cache:return -1else:self.cache.move_to_end(key)return self.cache[key]def put(self, key, value):if key in self.cache:self.cache.move_to_end(key)self.cache[key] = valueif len(self.cache) > self.capacity:self.cache.popitem(last=False)# 测试
cache = LRUCache(2)
cache.put(1, "value1")
cache.put(2, "value2")
print(cache.get(1)) # 输出: value1
cache.put(3, "value3") # 淘汰 key 2
print(cache.get(2)) # 输出: -1
总结
以上 5 个项目涵盖了字典在电影推荐、配置文件解析、选票统计排序、缓存系统等方面的典型应用。通过这些项目,可以深入理解字典的灵活性和强大功能,可以进一步巩固字典的使用技巧,并掌握其在实际开发中的多样化应用。