【蓝桥杯冲击国赛计划第6天】字典

news2024/9/22 15:42:20

文章目录

  • 1. 字典
    • 1.1 概念
    • 1.2 字典的定义
    • 1.3 字典的添加
    • 1.4 字典的修改
    • 1.5 字典的删除
    • 1.6 字典的访问
    • 1.7 字典的排序
  • 2. 实例「弗里的语言」
      • 题目描述
      • 输入描述
      • 输出描述
      • 输入输出样例
        • 示例1
        • 示例2
      • 运行限制
    • 2.1 简单分析
    • 2.2 初始化
    • 2.3 get 访问
    • 2.4 补充
    • 2.5 完整代码
  • 3. 实例「快递分拣」
      • 题目描述
      • 输入描述
      • 输出描述
      • 输入输出样例
        • 示例
      • 运行限制
    • 3.1 简单分析
    • 3.2 初始化
    • 3.3 get 访问
    • 3.4 遍历再遍历
    • 3.5 完整代码

在这里插入图片描述


1. 字典

1.1 概念

列表是以连续的整数为索引,与此不同的是,字典以 key 为索引,key 可以是任意不可变类型,通常用字符串或数值。且 value 不仅仅可以是数字和字符串,也可以是一个列表,元组。其实和哈希表一样,都是以键值对(key : value)的形式来查找数据,但字典十分的灵活。

❗️每个 key 只能在字典中出现一次

在这里插入图片描述


1.2 字典的定义

字典用一对花括号 {} 括起来,内部的值以 key : value 的形式呈现,key 可以是数字,字符串,甚至元组等数据结构。

# 字典的定义
empty_dict = {} # 创建空字典
massege={'小李':'123124543643','xiaohua':'17855666'} # 使用字符串作为 key
group_dict = {(60, 99):'good', 100:'nice'} # 使用元组作为 key

1.3 字典的添加

dict[key] = value 形式添加,key 分为两种情况。

  • 如果字典里没有该 key ,则创建一个新的 key : value 。
  • 如果字典里有该 key,原来的 value 值被覆盖。
# 字典的添加
dict2 = {}
dict2["左轮"] = 20 # 字典没有值时,创建
print(dict2)
dict2["左轮"] = 18 # 字典有值时,修改
print(dict2)

在这里插入图片描述


1.4 字典的修改

修改有两种方式:

  • dict[key] = value,如果字典里有该 key,原来的 value 值被覆盖。
  • 或者使用 update 方法,update 方法里面放置的是一个字典,里面的 key 如果在原来字典里,则修改值。如果不在,则添加新的 key : value 。
# 字典的修改
dict2 = {'左轮': 18}
dict2["左轮"] = 20 # 字典有值时,修改,但只能单次修改
print(dict2)
dict2.update({'左轮':16,"右轮":16}) # update,修改和创建都可以
print(dict2)

在这里插入图片描述


1.5 字典的删除

del dict[key] 可以删除指定字典的键,如果使用字典的内置方法 clear 会清空整个字典,使其变成空字典。如果直接 del dict,那么这个字典就真的不存在了,相当于彻底删除

# 字典的删除
dict2 = {'左轮': 18,'右轮': 20}
del dict2['右轮']  # 删除指定键
print(dict2)
dict2.clear() # 清空字典,但字典还在,变成空字典
print(dict2)
dict2 = {'左轮': 18,'右轮': 20}
del dict2 # 删除字典,真正删除了
print(dict2)

在这里插入图片描述


1.6 字典的访问

dict[key] 可以直接访问 key 的值,但如果不存在该 key ,就会报错。所以,这里多了 get 方法,语法是:dict.get(key),如果 key 存在,也可以直接访问 key 的值,如果 key 不存在,那么返回 None。

# 字典的访问
dict = {'Name': 'zuolun', 'Age': '1024'}
print(dict['Name']) # 访问指定值,如果key值不存在,将会抛出异常

# get()方法,不存在会返回None,但不会抛出异常
print(dict.get('lorem'))

在这里插入图片描述


1.7 字典的排序

字典排序:统一写在排序里,还在整理


2. 实例「弗里的语言」

我们之前通过哈希表完成了这个实例,现在我们通过字典就更加简单。

题目描述

小发明家弗里想创造一种新的语言,众所周知,发明一门语言是非常困难的,首先你就要克服一个困难就是,有大量的单词需要处理,现在弗里求助你帮他写一款程序,判断是否出现重复的两个单词。

输入描述

第 1 行,输入 N,代表共计创造了多少个单词。

第 2 行至第 N+1 行,输入 N 个单词。

1≤ N ≤10^4,保证字符串的总输入量不超过 10^6。

输出描述

输出仅一行。若有重复的单词,就输出重复单词,没有重复单词,就输出 NO,多个重复单词输出最先出现的。

输入输出样例

示例1

输入

6
1fagas 
dsafa32j
lkiuopybncv
hfgdjytr
cncxfg
sdhrest

输出

NO

示例2

输入

5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds

输出

sdfggfds

运行限制

  • 最大运行时间:3s
  • 最大运行内存: 512M

2.1 简单分析

如果用字典的话,寻找重复可以理解为字典里面是否存在相同的 key。所以我可以进行对字典的访问,但直接用 dict[key] 访问可能会报错,因为一开始没有添加 key。
我们一定是先判断是否有 key,再添加 key。如果先添加的话,存在重复值时,key 中的值会被覆盖,我们无法区别出这个 key 是现在添加的,还是我修改覆盖的。所以,一定是先判断是否有 key,再添加 key。如果有,那么说明重复,没有就说明未添加,添加进去即可。


2.2 初始化

设置空字典和查找标记(查不到为 0,查到为 1)

n = int(input())
d = {}
flag = 0 # 尚未找到

2.3 get 访问

如果访问不到新输入的键,说明字典中没有,所以添加该键到字典中(这里键所对应的值可以任意,我就将值设为 0 了。)

如果访问到新输入的键,证明重复,那么查找比较置1,且直接输出该键,退出循环。

for i in range(n):
    x = input()
    if d.get(x) == None: # 没有这个键
        d[x] = 0 # 添加,value任意即可

    else: # 有这个键
        print(x)
        flag = 1 # 找到了
        break

2.4 补充

如果查找标记一直是 0,说明该字典中不存在重复(也就是 get 一直访问不到),所以退出循环的时候,要判断 flag,如果为 0,说明要输出 “NO”。

if not flag: # 没找到
    print("NO")

2.5 完整代码

可在 我的仓库免费查看,文件名:10-字典-弗里的语言,如果无法使用可以及时私信我或在评论区指出,谢谢。


3. 实例「快递分拣」

题目描述

蓝桥王国的每个快递都包含两个参数:1.快递单号 2.快递城市。

小李是蓝桥王国的一名快递员,每天的快递分拣让他苦不堪言。

于是他想要你帮他设计一个程序用于快递的分拣(将不同快递按城市信息分开)。

输入描述

输入第一行包含一个整数 N,表示快递的个数。

接下来第 2∼N+1 行每行包含一个字符串 S 和一个字符串 P,分别快递单号以及快递对应的城市。

1≤N≤10^3,保证数据量不超过 10^6。

输出描述

输出共若干行。按城市的输入顺序依次输出城市的名称以及城市的快递个数,以及该城市的所有快递单号(单号按照输入顺序排序)。

输入输出样例

示例

输入

10 
10124214 北京
12421565  上海
sdafasdg213 天津
fasdfga124 北京
145252  上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉  
23423565f 沈阳
1245dfwfs 成都

输出

北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg 
1245dfwfs 
武汉 1
23423
沈阳 1
23423565f 

运行限制

  • 最大运行时间:1s

  • 最大运行内存: 256M


3.1 简单分析

这里比刚才的题难了一点点,首先是我们要确定键应该是城市的名称,然后快递单号是值。这里我们发现:一个键可能存在多个值,这时候我们会选择用列表来存储多个值。


3.2 初始化

一如既往的设置

n = int(input())
d = {} # 空字典

3.3 get 访问

首先我们要对我们输入的字符串进行分割,则 op[0] 是快递单号,op[1] 是城市,所以我们进行 get 访问的时候,访问的是 op[1],如果没访问到,说明字典里没有,需要添加,我们刚才说过,多个值可以用列表来存储,所以就 d[op[1]] = [op[0]]。如果 get 访问到,那么就需要添加,d[op[1]] 得到这个列表,尾插新的值即可。

for i in range(n):
    op = input().split()
    if d.get(op[1]) == None: # 字典没有需添加
        d[op[1]] = [op[0]] # 用列表做值,可以多次存储

    else: # 字典已有该值
        d[op[1]].append(op[0])

3.4 遍历再遍历

字典是一个可迭代对象,但单纯迭代的时候,它迭代的是字典的键。

如果我们要遍历字典的值,由于值也是一个列表,所以理应再用循环遍历。

for key in d: # 遍历字典,这类遍历的是键
    print(key,end=" ")
    x = len(d[key]) # 列表长度(该键有多少值)
    print(x)
    for i in range(x):
        print(d[key][i]) # 遍历输出每一个值

3.5 完整代码

可在 我的仓库免费查看,文件名:11-字典-快递分拣,如果无法使用可以及时私信我或在评论区指出,谢谢。


本文主要参考蓝桥杯省赛14天夺奖冲刺营,有兴趣的可以自己在蓝桥杯官网搜索

如有错误,敬请指正,欢迎交流🤝,谢谢♪(・ω・)ノ

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

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

相关文章

关于编辑器QScintilla(Scintilla)词法分析器取消非活动代码灰色显示

入门,首先看我这两篇博客:关于QScintilla库的入门大全https://biao2488890051.blog.csdn.net/article/details/126798996?spm1001.2014.3001.5502 关于编辑器QScintilla(Scintilla)词法分析器工作原理的分析(实现注释…

MATLAB算法实战应用案例精讲-【智能优化算法】黏菌算法(SMA)(附MATLAB实现代码)

前言 黏菌觅食算法(Slime Mould Algorithm,SMA)由Li及Mirjalili教授等人于2020年提出,主要模拟了黏菌的扩散及觅食行为,利用自适应权重模拟了基于生物振荡器的“黏菌传播波”产生正反馈和负反馈的过程,形成具有良好的探索能力和开发倾向的食物最优连接路径,因此具有较好的…

JavaSE之反射

目录Class类反射的概念反射的好处反射的应用场景三种获取Class对象的方式Class类中的方法Class中获取构造器的方法获取成员方法对象获取成员变量反射案例最后Class类 Class类创建的对象我们称为Class对象/类对象/字节码对象 Class对象会保存类中的信息(构造方法, 成员方法, 成…

STM32CubeMX新建工程并点亮一个LED

可提前看:STM32CubeMX环境安装(保姆级) 目录 进入STM32CubeMX界面 双击软件,可能会出现的弹窗 更改固件路径 新建工程 进入配置环境 以一个点灯程序为例 GPIO配置 输出电平设置 输出模式 上下拉 输出速度 ​编辑 U…

【笑小枫的SpringBoot系列】【十六】SpringBoot生成PDF

关于笑小枫💕 Hello,我是笑小枫,欢迎来到我的世界,喜欢的朋友关注一下我呦,大伙的支持,就是我坚持写下去的动力。 笑小枫个人博客:https://www.xiaoxiaofeng.com 本文源码:https://g…

DVWA之SQL注入(盲注)

文章目录方法一:基于布尔盲注1.判断是否存在注入,注入类型2.猜数据库名3.猜解数据库中的表名4.猜列名5.猜表中的字段值方法二:基于时间盲注1.判断是否存在注入,注入是字符型还是数字型2.猜解当前数据库名3.猜解数据库中的表名4.猜…

ASPNetZero 11.4 Release Angular + MVC + Crack

Asp. NET 带有现代UI和稳定的结构,是新的网页应用的起点。它会提供预建和工作页以及很强的基本构造。 基础解决方案 你的下一个网络应用程序 ASP.NET Zero 是具有现代 UI 和 SOLID 架构以及完整源代码的新 Web 应用程序的起点。 ASP.NET Zero的好处 ASP.NET Zero 通…

化合物应用-动物给药方式

给药方式 针对实验动物的给药方式有很多种,总体可分为局部给药和系统给药。系统给药又可分为肠外给药和肠内给药。 1.1 肠内给药(Enteral administration) 口服(per os,p.o)给药由于具有经济、方便、安全…

虚拟形象sdk哪个好?可以快速制作专属元宇宙形象

元宇宙的火爆,催生了很多提供元宇宙基座的服务商,目前市面上提供虚拟形象SDK的服务商不少于20家,这里小编给大家推荐ZEGO即构科技的Avatar虚拟形象SDK。 即构Avatar虚拟形象SDK概述 即构Avatar支持自定义管理人物的虚拟形象,通过默…

【虹科新品】 HK-MR430330绝对式光纤编码器(上)

虹科MR430&330系列绝对式光纤编码器是用于确定轴位置的角度计,均为纯光学无源设计。HK-MR330系列适用于间隔距离较大的编码器和控制器,HK-MR430 系列适用于由于体积小而提供小空间的系统。与增量式旋转编码器相比,测量值在开启后立即可用…

【JAVA程序设计】基于SSM的图书管理系统-有论文文档

基于SSM的图书管理系统-有文档项目获取项目简介开发环境项目技术功能结构文档目录运行截图项目获取 获取方式(点击下载):是云猿实战 项目经过多人测试运行,可以确保100%成功运行。 项目简介 这是一个基于ssm的图书管理系统&…

canvas绘制时钟

这篇文章用于介绍html5的新标签&#xff0c;<canvas></canvas> Canvas介绍 canvas是HTML5新增的元素&#xff0c;通过javascript脚本绘制图形。那么canvas可以用来干啥呢&#xff1f; 制作web网页游戏数据可视化&#xff1b;即&#xff1a;echarts就是基于canva…

ajax 学习记录

ajax 学习记录ecplise 下载安装创建项目创建ajax后台请求处理类新建包创建servletAjaxServlet 内容web.xml新建index.htmlindex.html内容运行ecplise 下载安装 ecplise 21.06 Eclipse IDE for Enterprise Java and Web Developers 下载 下载完直接解压运行 创建项目 先下载…

基于最小二乘支持向量机(LS-SVM)进行分类、函数估计、时间序列预测和无监督学习附Matlab代码

​✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法…

线性回归(机器学习)

用神经网络的思维来看待线性回归 单层的神经网络&#xff0c;其实就是一个神经元&#xff0c;可以完成一些线性的工作&#xff0c;比如拟合一条直线&#xff0c;这用一个神经元就可以实现。 当变量多于一个时&#xff0c;两个变量的量和数值有可能差别很大&#xff0c;这种情况…

MicroApp的Vite项目,特别全面

目录 前言 简介 分离 修改基座 子应用修改 修改vite.config.js​编辑 修改index.html 基座修改 处理子应用静态资源 效果 基座与子应用传值 在基座的MicroApp的index页面修改 在子应用的App.tsx文件进行useEffect的监听 效果​编辑 去掉菜单栏头部 效果​编辑 …

SpringBoot面试

0. Spring Boot 原理 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot 致力…

D. Bandit in a City(DFS + 叶子节点数目)

Problem - 1436D - Codeforces 输出标准输出 城市里出现了强盗! 他们中的一个正试图尽可能多地抓捕市民。 这个城市由n个广场组成&#xff0c;由n-1条道路连接&#xff0c;从任何其他广场都可以到达任何广场。1号广场是主广场。 星期天散步后&#xff0c;所有的道路都改为单行…

uni-app —— 小程序登录功能的相关实现

文章目录 前言一、示例图二、静态页面的搭建 1.登录页面的静态页面css样式设置2.我的页面的静态页面css样式设置三、登录页面的实现逻辑 1.进行表单验证的组件2.验证登录成功的思路3.具体代码实现一、示例图 二、静态页面的搭建 实现思路&#xff1a; 主要需要实现的功能点&am…

企业为什么做不好生产计划?

生产计划是企业对生产任务作出统筹安排&#xff0c;具体拟定生产产品的品种、数量、质量和进度的计划。是企业经营计划的重要组成部分&#xff0c;是企业进行生产管理的重要依据。既是实现企业经营目标的重要手段&#xff0c;也是组织和指导企业生产活动有计划进行的依据。企业…