Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例:5个项目开发实例

内容摘要

本文包括 5 个使用 Python 字典的综合应用实例。具体是:

  1. 电影推荐系统
  2. 配置文件解析器
  3. 选票统计与排序
  4. 电话黄页管理系统
  5. 缓存系统(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 票   

代码解析

  1. 统计得票数

    • 使用字典 vote_count 统计每个参选人的得票数。
    • 遍历选票列表 votes,如果参选人已经在字典中,则得票数加 1;否则,初始化得票数为 1。
  2. 按得票数排序

    • 使用 sorted() 函数对字典的键值对进行排序。
    • key=lambda x: x[1] 表示按值(得票数)排序。
    • reverse=True 表示从高到低排序。
  3. 转换为字典

    • 排序后的结果是一个列表,每个元素是一个元组 (参选人, 得票数)
    • 使用 dict() 将排序后的列表转换回字典。
  4. 输出结果

    • 遍历排序后的字典,输出每个参选人的得票数。

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 个项目涵盖了字典在电影推荐、配置文件解析、选票统计排序、缓存系统等方面的典型应用。通过这些项目,可以深入理解字典的灵活性和强大功能,可以进一步巩固字典的使用技巧,并掌握其在实际开发中的多样化应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/68255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九、CSS工程化方案

一、PostCSS介绍 二、PostCSS插件的使用 项目安装 - npm install postcss-cli 全局安装 - npm install postcss-cli -g postcss-cli地址:GitHub - postcss/postcss-cli: CLI for postcss postcss地址:GitHub - postcss/postcss: Transforming styles…

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架,设计目的是简化搭建及开发过程,并不是对Spring功能上的增强,而是提供了一种快速使用Spr…

GESP2024年3月认证C++六级( 第三部分编程题(2)好斗的牛)

参考程序&#xff08;暴力枚举&#xff09; #include <iostream> #include <vector> #include <algorithm> using namespace std; int N; vector<int> a, b; int ans 1e9; int main() {cin >> N;a.resize(N);b.resize(N);for (int i 0; i &l…

kafka消费者详细介绍(超级详细)

文章目录 一、Kafka 消费者与消费者组1.1 Kafka 消费者&#xff08;Consumer&#xff09;概述1.1.1 消费者工作流程1.1.2 消费者的关键配置 1.2 Kafka 消费者组&#xff08;Consumer Group&#xff09;概述1.2.1 消费者组的工作原理1.2.2 消费者组的优点1.2.3 消费者组的再均衡…

SpringBoot统一数据返回格式 统一异常处理

统一数据返回格式 & 统一异常处理 1. 统一数据返回格式1.1 快速入门1.2 存在问题1.3 案列代码修改1.4 优点 2. 统一异常处理 1. 统一数据返回格式 强制登录案例中,我们共做了两部分⼯作 通过Session来判断⽤⼾是否登录对后端返回数据进⾏封装,告知前端处理的结果 回顾 后…

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口&#xff08;可以不修改&#xff09; 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…

十年筑梦,再创鲸彩!庆祝和鲸科技十周年

2025 年 1 月 16 日&#xff0c;“十年筑梦&#xff0c;再创鲸彩” 2025 和鲸科技十周年庆暨 2024 年终表彰大会圆满落幕。 十年征程&#xff0c;和鲸科技遨游于科技蓝海&#xff0c;破浪前行&#xff0c;无惧风雨。期间所取得的每一项成就&#xff0c;都凝聚着全体成员的智慧结…

【Uniapp-Vue3】动态设置页面导航条的样式

1. 动态修改导航条标题 uni.setNavigationBarTitle({ title:"标题名称" }) 点击修改以后顶部导航栏的标题会从“主页”变为“动态标题” 2. 动态修改导航条颜色 uni.setNavigationBarColor({ backgroundColor:"颜色" }) 3. 动态添加导航加载动画 // 添加加…

openlayer getLayerById 根据id获取layer图层

背景&#xff1a; 在项目中使用getLayerById获取图层&#xff0c;这个getLayerById()方法不是openlayer官方文档自带的&#xff0c;而是自己封装的一个方法&#xff0c;这个封装的方法的思路是&#xff1a;遍历所有的layer&#xff0c;根据唯一标识【可能是id&#xff0c;也可能…

Unity入门2 背景叠层 瓦片规则

切割场景 瓦片调色盘 放在Assets里面新建瓦片地图,palettes tile 瓦片 palettes调色板 上下窗口是分开的 拖进这个格子窗 瓦片太碎&#xff0c;要封装 装好之后&#xff0c;只是把瓦片放上去了&#xff0c;但是还没有画布&#xff0c;显示是这样的 no valid target 新建“…

Kafka 日志存储 — 日志清理

Kafka 提供两种日志清理策略&#xff1a;日志清理(Log Delete)与日志压缩(Log Compaction)。 1 日志清理 通过broker端参数log.cleanup.policy来设置日志清理策略&#xff0c;默认值为“delete”。如果要采用日志压缩的清理策略&#xff0c;则设置为“compact”。可以同时支持…

Semantic Kernel - Kernel理解

目录 一、关于Kernel 二、案例实战 三、运行截图 一、关于Kernel 微软的 Semantic Kernel 项目中,Semantic Kernel 是一个工具框架,旨在使得开发人员能够更容易地将大语言模型(如GPT)集成到不同的应用中。它通过提供一组接口、任务模板和集成模块,使开发者能够轻松地设计…

人格分裂(交互问答)-小白想懂Elasticsearch

通过交互式追问了解一个中间件 ? 啥是Elasticsearch ! 分布式搜索和分析引擎 ? 为啥是分布式搜索&#xff0c;单体难道用不了吗 ? 实际上是说这个东西可以分布式部署 ! 单机可用但扩展性差&#xff0c;分布式通过分片、副本和负载均衡实现海量数据存储与高并发处理 ? 提…

golang 使用双向链表作为container/heap的载体

MyHeap&#xff1a;container/heap的数据载体&#xff0c;需要实现以下方法&#xff1a; Len&#xff1a;堆中数据个数 Less&#xff1a;第i个元素 是否必 第j个元素 值小 Swap&#xff1a;交换第i个元素和 第j个元素 Push&#xff1a;向堆中追加元素 Pop&#xff1a;从堆…

svn: E000111: Error running context: Connection refused

1、具体报错&#xff1a; 看起来是window主机的子系统ubuntu svn客户端无法访问到window主机的svn的服务端。 2、问题&#xff1a; window主机安装子系统ubuntu&#xff0c;ubuntu是可以直接访问外网&#xff0c;但是ubuntu是不能访问window主机的服务&#xff0c;比如svn的se…

PostgreSQL TRUNCATE TABLE 操作详解

PostgreSQL TRUNCATE TABLE 操作详解 引言 在数据库管理中,经常需要对表进行操作以保持数据的有效性和一致性。TRUNCATE TABLE 是 PostgreSQL 中一种高效删除表内所有记录的方法。本文将详细探讨 PostgreSQL 中 TRUNCATE TABLE 的使用方法、性能优势以及注意事项。 什么是 …

【时时三省】(C语言基础)对比一组函数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对比一组函数 比如对比一下scanf fscanf sscanf和printf fprintf sprintf scanf 针对标准输入的格式化的输入语句 其实它针对的是stdin fscanf 针对所有输入流的格式化的输入语句 它是针对s…

音频 PCM 格式 - raw data

文章目录 raw 音频格式&#xff1a;PCM其他音频格式&#xff1a;mp31. 无损压缩音频&#xff08;类比 PNG 图像&#xff09;2. 有损压缩音频&#xff08;类比 JPEG 图像&#xff09; 试了一下科大讯飞的音频识别云 api&#xff0c;踩了点坑 与本文无关&#xff1a;讯飞的 api 使…

(MySQL)头歌数据库作业答案

1.数据库和表的基本操作 1.1数据库和表的基本操作&#xff08;一&#xff09; 第1关&#xff1a;查看表结构与修改表名 本关任务&#xff1a;修改表名&#xff0c;并能顺利查询到修改后表的结构。 USE Company;#请在此处添加实现代码 ########## Begin ###################…

计算机网络 (57)改进“尽最大努力交付”的服务

前言 计算机网络中的“尽最大努力交付”服务是网络层的一种数据传输方式。这种服务的特点是网络层只负责尽力将数据报从源端传输到目的端&#xff0c;而不保证数据传输的可靠性。 一、标记与分类 为数据分组打上标记&#xff1a; 给不同性质的分组打上不同的标记&#x…