当前位置: 首页 > news >正文

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

相关文章:

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

Python “字典” 实战案例:5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是: 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统(LRU 缓存) 以上每一个实例均有完整的程序代…...

Qt中Widget及其子类的相对位置移动

Qt中Widget及其子类的相对位置移动 最后更新日期:2025.01.25 下面让我们开始今天的主题… 一、开启篇 提出问题:请看上图,我们想要实现的效果是控件黄色的Widge(m_infobarWidget)t随着可视化窗口(m_glWidge…...

4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍 SQLAlchemy是对数据库的一个抽象 开发者不用直接与SQL语句打交道 Python对象来操作数据库 SQLAlchemy是一个关系型数据库 安装 flask中SQLAlchemy的配置 from flask import Flask from demo.user_oper import userdef create_app():app Flask(__name__)# 使用sessi…...

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架,专为高并发、低延迟的场景设计。它基于 Go 语言开发,结合了字节跳动在微服务架构中的实践经验,旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…...

Effective C++ 规则51:编写 new 和 delete 时需固守常规

1、背景 在 C 中,如果你需要为类自定义 new 和 delete,必须遵循一些约定和规则,以确保内存管理的一致性、可维护性和安全性。当我们使用 new 和 delete 操作时,C 编译器会: 调用全局或类特定的 operator new 来分配内…...

[RoarCTF 2019]Easy Calc1

题目 查看页面源代码 <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success">…...

【Bug 记录】el-sub-menu 第一次进入默认不高亮

项目场景&#xff1a; 项目场景&#xff1a;el-sub-menu 第一次进入默认不高亮 问题描述 例如&#xff1a;sub-menu 的 index 后端默认传过来是 number&#xff0c;我们需要手动转为 string&#xff0c;否则会有警告&#xff0c;而且第一次进入 sub-menu 默认不高亮。 解决方…...

自然语言处理——从原理、经典模型到应用

1. 概述 自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是一门借助计算机技术研究人类语言的科学&#xff0c;是人工智能领域的一个分支&#xff0c;旨在让计算机理解、生成和处理人类语言。其核心任务是将非结构化的自然语言转换为机器可以…...

Linux——冯 • 诺依曼体系结构

目录 一、冯•诺依曼体系结构原理二、内存提高冯•诺依曼体系结构效率的方法三、当用QQ和朋友聊天时数据的流动过程四、关于冯诺依曼五、总结 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 流程&#…...

【FISCO BCOS】二十四、通过Java SDK对FISCO BCOS进行压力测试

Java SDK Demo是基于Java SDK的基准测试集合,能够对FISCO BCOS节点进行压力测试。Java SDK Demo提供有合约编译功能,能够将Solidity合约文件转换成Java合约文件,此外还提供了针对转账合约、CRUD合约以及AMOP功能的压力测试示例程序。本篇我们来讲讲使用java SDK压力测试的操…...

Gurobi基础语法之字典

Python中的字典&#xff1a;dict 我们先来介绍一下Python语法中的 dict 类型, 字典中可以通过任意键值来对数据进行映射&#xff0c;任何无法修改的python对象都可以当作键值来使用&#xff0c;这些无法修改的Python对象包括&#xff1a;整数(比如&#xff1a;1)&#xff0c;浮…...

汽车OEMs一般出于什么目的来自定义Autosar CP一些内容

汽车OEMs在使用AUTOSAR CP(Classic Platform)协议时,可能会根据自身的特定需求对标准协议进行修改,形成自己的企业标准(企标)。这种修改通常是为了满足特定的硬件平台、功能需求、安全要求或优化性能。以下是一些常见的修改场景和例子: 1. 硬件平台适配 企业可能会根据…...

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 在享元模式中&#xff0c;存储这些共享实例对象的地方称为享元池&…...

Java使用FFM API调用SDL

首发于Enaium的个人博客 首先我们需要创建一个Gradle项目&#xff0c;之后设置项目的JDK版本&#xff0c;设置为22及以上版本。 plugins {kotlin("jvm") version "2.1.0" }group "cn.enaium" version "1.0-SNAPSHOT"repositories {…...

bash: ./xxx: No such file or directory

问题现象 在使用开源或他人可执行文件的时候&#xff0c;可能会遇到 bash: ./squashfs2sparse: No such file or directory 的报错&#xff1b;实际测试发现该文件存在&#xff0c;并且有可执行权限&#xff1b; 问题分析 通过对报错文件的分析 1&#xff1a;文件具有可执行…...

Linux(Centos 7.6)命令详解:wc

1.命令作用 打印文件的行数、单词数、字节数&#xff0c;如果指定了多个文件&#xff0c;还会打印以上三种数据的总和(Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified) 2.命令语法 Usage: wc [OPTION]... [FIL…...

PHP EOF (Heredoc) 详解

PHP EOF (Heredoc) 详解 PHP 中的 EOF(End Of File)是一种非常有用的语法特性,允许开发者创建多行字符串。它特别适合于创建格式化文本,如配置文件、HTML 模板等。本文将详细讲解 PHP EOF 的用法、优势以及注意事项。 什么是 EOF? EOF 是一种特殊的字符串定义方式,它允…...

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…...

第27章 测试驱动开发模式:深入测试技术

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

C语言教程——文件处理(2)

目录 前言 一、顺序读写函数&#xff08;续&#xff09; 1.1fprintf 1.2fscanf 1.3fwrite 1.4fread 二、流和标准流 2.1流 2.2标准流 2.3示例 三、sscanf和sprintf 3.1sprintf 3.2sscanf 四、文件的随机读写 4.1fseek 4.2ftell 4.3rewind 五、文件读取结束的…...

QT TLS initialization failed

qt使用QNetworkAccessManager下载文件&#xff08;给出的链接可以在浏览器里面下载文件&#xff09;&#xff0c;下载失败&#xff0c; 提示“TLS initialization failed”通常是由于Qt在使用HTTPS进行文件下载时&#xff0c;未能正确初始化TLS&#xff08;安全传输层协议&…...

金融级分布式数据库如何优化?PawSQL发布OceanBase专项调优指南

前言 OceanBase数据库作为国产自主可控的分布式数据库&#xff0c;在金融、电商、政务等领域得到广泛应用&#xff0c;优化OceanBase数据库的查询性能变得愈发重要。PawSQL为OceanBase数据库提供了全方位的SQL性能优化支持&#xff0c;助力用户充分发挥OceanBase数据库的性能潜…...

在Kubernets Cluster中部署LVM类型的StorageClass - 上

适用场景 看到B站技术部门的文章&#xff0c;是关于如何在k8s集群部署Elastic Search和Click House等IO密集型数据库应用的。 因为要充分利用NvME SSD盘的IOPS&#xff0c;所有数据库应用都直接调用本地SSD盘做为stateful application的 Persistent Volumes。为了可用动态的分…...

mysql 学习6 DML语句,对数据库中的表进行 增 删 改 操作

添加数据 我们对 testdatabase 数据中 的 qqemp 这张表进行 增加数据&#xff0c;在这张表 下 打开 命令行 query console 在 软件中就是打开命令行的意思 可以先执行 desc qqemp; 查看一下当前表的结构。 插入一条数据 到qqemp 表&#xff0c;插入时要每个字段都有值 insert…...

【全栈】SprintBoot+vue3迷你商城(10)

【全栈】SprintBootvue3迷你商城&#xff08;10&#xff09; 往期的文章都在这里啦&#xff0c;大家有兴趣可以看一下 后端部分&#xff1a; 【全栈】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全栈】SprintBootvue3迷你商城&#xff08;2&#xff09; 【全栈】Sp…...

2025年01月25日Github流行趋势

项目名称&#xff1a;it-tools 项目地址url&#xff1a;https://github.com/CorentinTh/it-tools项目语言&#xff1a;Vue历史star数&#xff1a;25298今日star数&#xff1a;212项目维护者&#xff1a;CorentinTh, apps/renovate, cgoIT, sharevb, marvin-j97项目简介&#xf…...

java后端之登录认证

基础登录功能&#xff1a;根据提供的用户名和密码判断是否存在于数据库 LoginController.java RestController Slf4j public class LoginController {Autowiredprivate UserService userService;PostMapping("/login")public Result login(RequestBody User user) {…...

2024年AI多极竞争:技术创新与商业突破

标题&#xff1a;2024年AI多极竞争&#xff1a;技术创新与商业突破 文章信息摘要&#xff1a; 2024年初&#xff0c;人工智能领域呈现多极竞争格局。OpenAI、Google和Mistral等公司在视频生成、大语言模型架构和模型能力方面实现突破性创新。这些进展体现了AI技术在多模态能力…...

25.1.25Java复习|数组

一、数组复习&#xff1a; import java.util.Scanner; import java.*; public class Example1 {public static void main(String[] args){Scanner scnew Scanner(System.in);String[] namesnew String[5];//创建了一个可以容纳5个字符串的数组for(int i0;i<5;i){System.ou…...

总结8..

#include <stdio.h> // 定义结构体表示二叉树节点&#xff0c;包含左右子节点编号 struct node { int l; int r; } tree[100000]; // 全局变量记录二叉树最大深度&#xff0c;初始为0 int ans 0; // 深度优先搜索函数 // pos: 当前节点在数组中的位置&#xff0c…...

谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解

JavaScript 中的事件冒泡&#xff08;Event Bubbling&#xff09;和事件捕获&#xff08;Event Capturing&#xff09;&#xff0c;是浏览器在处理事件时采用的两种机制&#xff0c;它们在事件的传播顺序上有显著区别。这两种机制帮助开发者在事件触发时&#xff0c;能够以不同…...

tcp/ip协议和ip协议,tcp/ip协议 ip协议

TCP/IP协议和IP协议在网络通信中扮演着重要的角色&#xff0c;它们之间既有联系又有区别。以下是对两者的详细解释&#xff1a; TCP/IP协议 定义&#xff1a; TCP/IP协议&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;是网络通信协议的一种&…...

【JavaEE进阶】Spring留言板实现

目录 &#x1f38d;预期结果 &#x1f340;前端代码 &#x1f384;约定前后端交互接口 &#x1f6a9;需求分析 &#x1f6a9;接口定义 &#x1f333;实现服务器端代码 &#x1f6a9;lombok介绍 &#x1f6a9;代码实现 &#x1f334;运行测试 &#x1f384;前端代码实…...

【模型】RNN模型详解

1. 模型架构 RNN&#xff08;Recurrent Neural Network&#xff09;是一种具有循环结构的神经网络&#xff0c;它能够处理序列数据。与传统的前馈神经网络不同&#xff0c;RNN通过将当前时刻的输出与前一时刻的状态&#xff08;或隐藏层&#xff09;作为输入传递到下一个时刻&…...

软件测试压力太大了怎么办?

本文其实是知乎上针对一个问题的回答&#xff1a; 目前在做软件测试&#xff0c;主要负责的是手机端的项目测试&#xff0c;项目迭代很快&#xff0c;每次上线前验正式都会发现一些之前验测试包时候没有发现的问题&#xff0c;压力太大了&#xff0c;应该怎么调整 看过我之前其…...

ES6 类语法:JavaScript 的现代化面向对象编程

Hi&#xff0c;我是布兰妮甜 &#xff01;ECMAScript 2015&#xff0c;通常被称为 ES6 或 ES2015&#xff0c;是 JavaScript 语言的一次重大更新。它引入了许多新特性&#xff0c;其中最引人注目的就是类&#xff08;class&#xff09;语法。尽管 JavaScript 一直以来都支持基于…...

【时时三省】(C语言基础)二进制输入输出

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 二进制输入 用fread可以读取fwrite输入的内容 字符串以文本的形式写进去的时候&#xff0c;和以二进制写进去的内容是一样的 整数和浮点型以二进制写进去是不一样的 二进制输出 fwrite 字…...

【2024年华为OD机试】(A卷,200分)- 农场施肥 (JavaScriptJava PythonC/C++)

一、问题描述 题目描述 某农场主管理了一大片果园,fields[i] 表示不同果林的面积,单位:平方米(m)。现在需要为所有的果林施肥,且必须在 n 天之内完成,否则会影响收成。小布是果林的工作人员,他每次选择一片果林进行施肥,且一片果林施肥完后当天不再进行施肥作业。 …...

k8s服务StatefulSet部署模板

java 服务StatefulSet部署模板 vim templates-test.yamlapiVersion: apps/v1 kind: StatefulSet metadata:labels:app: ${app_labels}name: ${app_name}namespace: ${app_namespace} spec:replicas: ${app_replicas_count}selector:matchLabels:app: ${app_labels}template:la…...

跟我学C++中级篇——C++初始化的方式

一、初始化的方式 在前面的初级篇中对C的初始化有过一个说明。但随着新标准的迭代以及新的方式的应用&#xff0c;本篇对初始化再做一次整体的总结。下面把C的初始化按照时间线进行一个划分&#xff1a; 1、早期初始化 这种初始化中&#xff0c;开发者一般在初学时都会遇到&am…...

设计模式的艺术-代理模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解代理模式 代理模式&#xff08;Proxy Pattern&#xff09;&#xff1a;给某一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引用。代理模式是一种对象结构型模式。 代理模式类型较多…...

【Nginx】【SSE】【WebSocket】Nginx配置SSE,WebSocket的转发请求

Nginx 配置 SSE 和 WebSocket 转发 一、配置背景&#xff08;火狐游览器不支持&#xff0c;建议谷歌游览器开发测试&#xff09; 在使用 Django 框架开发 Web 应用时&#xff0c;为了实现实时通信&#xff0c;可以选择使用以下两种技术&#xff1a; SSE (Server-Sent Events…...

Gin 应用并注册 pprof

pprof 配置与使用步骤 1. 引言 通过下面操作&#xff0c;你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据&#xff0c;并通过图形化界面进行深度分析。 1. 安装依赖 首先&#xff0c;确保安装了 gi…...

国产编辑器EverEdit - 输出窗口

1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果&#xff0c;主要包括&#xff1a; 查找类&#xff1a;查找全部&#xff0c;筛选等待操作&#xff0c;可以把查找结果打印到输出窗口中&#xff1b; 程序类&#xff1a;在执行外部程序时(如&#xff1a;命令窗…...

【C++探索之路】STL---string

走进C的世界&#xff0c;也意味着我们对编程世界的认知达到另一个维度&#xff0c;如果你学习过C语言&#xff0c;那你绝对会有不一般的收获&#xff0c;感受到C所带来的码云风暴~ ---------------------------------------begin--------------------------------------- 什么是…...

安装 docker 详解

在平常的开发工作中&#xff0c;我们经常需要部署项目。随着 Docker 容器的出现&#xff0c;大大提高了部署效率。Docker 容器包含了应用程序运行所需的所有依赖&#xff0c;避免了换环境运行问题。可以在短时间内创建、启动和停止容器&#xff0c;大大提高了应用的部署速度&am…...

GCC之编译(8)AR打包命令

GCC之(8)AR二进制打包命令 Author: Once Day Date: 2025年1月23日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章请查看专栏: Linux实践记录_Once-Day的博客-C…...

自定义命令执行器:C++中命令封装的深度探索(C/C++实现)

在现代软件开发中&#xff0c;执行系统命令是一项常见的需求&#xff0c;无论是自动化脚本、系统管理工具&#xff0c;还是需要调用外部程序的复杂应用程序&#xff0c;都离不开对系统命令的调用。然而&#xff0c;直接使用系统调用&#xff08;如 execve&#xff09;虽然简单&…...

Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)

Android BitmapShader简洁实现马赛克/高斯模糊&#xff08;毛玻璃&#xff09;&#xff0c;Kotlin&#xff08;三&#xff09; 发现&#xff0c;如果把&#xff08;二&#xff09; Android BitmapShader简洁实现马赛克&#xff0c;Kotlin&#xff08;二&#xff09;-CSDN博客 …...

7.渲染管线——几何阶段的概述

几何阶段是渲染管线中的一个重要部分&#xff0c;主要负责处理3D模型的几何信息&#xff08;比如顶点位置、形状、大小等&#xff09;&#xff0c;并将它们转换为屏幕上的2D图像。用通俗易懂的方式来解释&#xff1a; 通俗解释&#xff1a;几何阶段就像把3D模型“拍扁”成2D照片…...