“笨办法”学Python 3 ——练习 39. 字典,可爱的字典
练习39 源代码
# create a mapping of state to abbreviation
#创建一个州与缩写的映射
states = {'Oregon':'OR','Florida':'FL','California': 'CA',
'New York': 'NY','Michigan':'MI'} #创建一个字典,key为州名,value为州缩写#Create a basic set of states and some cities in them
#创造一系列州与其中的一些城市
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'} #创建字典,key为州缩写,value为城市#add some more cities
#增加更多的城市
cities['NY'] = 'New York' #添加cities字典的key为NY,value为New York
cities['OR'] = 'Portland' #添加cities字典的key为OR,value为Portland#print out some cities 打印一些城市
print('-' * 10)
print("NY State has: ",cities['NY']) #通过cities字典的key为NY,打印对应Value
print("OR State has: ",cities['OR']) #同上#print some states 打印一些州
print('-' * 10)
print("Michigan's abbreviation is: ",states['Michigan']) #通过字典states的key'Michigan',打印对应的Value
print("Florida's abbreviation is: ",states['Florida']) #同上#do it by using the state then cities dict
# 通过使用州和城市的字典来打印
print('-' * 10)
print("Michigan has: ",cities[states['Michigan']])
#step1,通过states字典的key 'Michigan'找到对应的value 'MI';step2,'MI'又作为cities字典的key,打印对应的value 'Detroit'。
print("Florida has: ",cities[states['Florida']]) #原理同上# print every state abbreviation 打印每个州的缩写
print('-' * 10)
#items()函数以列表返回可遍历的(键值)元组数组。列表内为元组,元组内包含了字典的key和value
for state,abbrev in list(states.items()):
#items()函数以列表返回可遍历的(键值)元组数组。列表内为元组,元组内包含了字典的key和valueprint(f"{state} is abbreviated {abbrev}")#print every city in states
print('-' * 10)
#for循环遍历字典,items()将字典转化为字典视图特殊序列
for abbrev, city in list(cities.items()):print(f"{abbrev} has the city {city}")# now do both at the same time 同时打印所以州和城市
print('-' * 10)
#for循环遍历字典,items()将字典转化为字典视图特殊序列
for state, abbrev in list(states.items()):print(f"{state} state is abbreviated {abbrev}")print(f"and has city {cities[abbrev]}")print('-' * 10)# safely get a abbreviation by state that might not be there
#安全的获得一个可能不存在的州的缩写
state = states.get('Texas') #get()函数,获取指定键对应的值,若键不存在,则可自定义输出值,不会报错。if not state:print("Sorry, no Texas.")#get a city with a default value 获得一个城市的默认值
city = cities.get('TX', 'Does Not Exist') #获取不存在的州缩写,并自定义输出元素,且不报错
print(f"The city for the state 'TX' is {city}")
输出结果
----------
NY State has: New York
OR State has: Portland
----------
Michigan's abbreviation is: MI
Florida's abbreviation is: FL
----------
Michigan has: Detroit
Florida has: Jacksonvill
----------
Oregon is abbreviated OR
Florida is abbreviated FL
California is abbreviated CA
New York is abbreviated NY
Michigan is abbreviated MI
----------
CA has the city San Francisco
MI has the city Detroit
FL has the city Jacksonvill
NY has the city New York
OR has the city Portland
----------
Oregon state is abbreviated OR
and has city Portland
Florida state is abbreviated FL
and has city Jacksonvill
California state is abbreviated CA
and has city San Francisco
New York state is abbreviated NY
and has city New York
Michigan state is abbreviated MI
and has city Detroit
----------
Sorry, no Texas.
The city for the state 'TX' is Does Not Exist
知识点:
1.字典是什么?
**作用:**字典是用来把你想要存储的东西映射或关联到一些键(keys),以便你能够获取到它们。可存储任意类型对象。
**格式:**字典的每个键值(key=>value)用冒号分割,每个对之间用逗号分割,整个字典包括在花括号中,格式为:d = {key1 : value1, key2 : value2}。
**规则:**键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
2. 字典和列表的区别
(1)字典不仅可以通过数值查找元素,还可以通过字符串来查找元素。列表只能通过数值查找元素。
(2)字典可以通过字符串往里添加元素,也可以通过字符串或数值来删除元素。而列表只能通过数值来添加和删除元素。
3.字典和列表的应用场景
(1)字典可以用在各种需要通过某个值去查看另一个值的场合。
(2)列表可以用在专供需要有序排列的数据使用的。
(3)字典是键值对的组合,列表是一些项的有序排列。
4.字典的items()函数
返回字典中成对的键和值形成的元组,返回的是一种名叫字典视图的特殊序列,其中每个元素都是一个元组。可以用于 for 来循环遍历;
示例:
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
#items函数,将字典的key和value作为元组,返回存在dict_items开始的字典视图特殊序列
cities_it = cities.items()
print(cities_it)
#加list函数后,将字典视图特殊序列转化为列表
cities_li = list(cities.items())
print(cities_li)#dict_items可用于for循环遍历字典的键和值
for key, value in cities_it:print(f"the key is {key}, the value is {value}." )#items()和list()函数合用,返回列表,用于for循环
for key, value in cities_li:print (f"the key is {key}, the value is {value}.")
输出结果:
dict_items([('CA', 'San Francisco'), ('MI', 'Detroit'), ('FL', 'Jacksonvill')])
[('CA', 'San Francisco'), ('MI', 'Detroit'), ('FL', 'Jacksonvill')]
the key is CA, the value is San Francisco.
the key is MI, the value is Detroit.
the key is FL, the value is Jacksonvill.
the key is CA, the value is San Francisco.
the key is MI, the value is Detroit.
the key is FL, the value is Jacksonvill.
5.字典get()函数
get()函数用法:在获取键对应的值的时候,使用get()方法可以避免因未找到相应目标而引发异常的情况。
语法:
my.dict.get(key,default)
Key为我们要查询的键,default为未找到时的默认返回值,我们可以进行自定义。
示例:
#dict.get()函数
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
abbrev = cities.get('CA') #获取对应键的值
print(abbrev)#若该键不存在,使用get函数不会报错
abbrev_no = cities.get('NI')
print(abbrev_no)#若该键不存在,可自定义输出内容
#第一种
abbrev_no1 = cities.get('AB')
if not abbrev_no1:print("NO EXIT.")
#第二种
abbrev_no1 = cities.get('AB', "Does not exit the key.")
print(abbrev_no1)
输出结果:
San Francisco
None
NO EXIT.
Does not exit the key.
附加练习
1.找找 Python 的字典文档,试试多进行一些操作。
python字典常用的函数:clear、get、items、keys、values、pop。
(1)clear()函数
使用clear()方法会清空字典中的所有元素。
示例:
#输入
# dict.clear()函数
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
cities.clear()
print(cities)#输出
{}
(2)get()函数
见知识点。
(3)items()函数
见知识点。
(4)keys()函数
它的使用方式和items使用方法类似,keys返回字典中的键。输出形式字典视图特殊序列。
示例:
#输入
#dict.key()函数
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
print(cities.keys())#输出
dict_keys(['CA', 'MI', 'FL'])
(5)values()函数
vlaues()返回字典中的所有值。输出形式字典视图特殊序列。
示例:
#dict.values()函数
#输入
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
print(cities.values())#输出
dict_values(['San Francisco', 'Detroit', 'Jacksonvill'])
(6)pop()函数
pop()方法会删除指定的键,并返回其值,如果没有找到相应键可输出默认值。
语法:
my_dict.pop(key,default)
Key为我们要删除的键,当没有找到该键的时候会输出default,default可自定义,当没有default时返回的是None。类似get()函数。
示例:
#dict.pop()函数
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
print(cities.pop('CA')) #删除除键'CA'及对应值
print(cities)#删除键对,若键'NI'不存在,输出'NO Exit'
cities_pop = cities.pop("NI","NO Exit")
print(cities_pop)
输出结果:
{'MI': 'Detroit', 'FL': 'Jacksonvill'}
NO Exit
2. 看看你不能用字典做什么。很重要的一点是它们没有次序,试着玩玩看。
值得注意的是,从Python3.6开始,Python中内置的字典是有序的,这里的有序是指输出有序,是按照插入的顺序输出的,而不是指按照key的字母数字顺序。原先字典是无序的。
(1)字典的无序是指,不能人为重新排序,只能通过转化为字典视图特殊序列(类似元组和列表组合)进行排序,字典本身的顺序不会发生改变,但也可以通过排序后的字典视图特殊序列输出键值对。
示例:
#字典排序sorted()函数,及字典的顺序
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}#for循环遍历字典
print("-" * 20)
for key,value in list(cities.items()):print(f"key: {key}, value: {value}")#按照字典的键排序
print("-" * 20)
cities_s1 = sorted(cities.items(), key= lambda x : x[0])
print(cities_s1)#按照字典的值排序
print("-" * 20)
cities_s2 = sorted(cities.items(), key= lambda x : x[1])
print(cities_s2)#for循环遍历
print("-" * 20)
for key, value in list(cities_s1):print(key,value)
输出结果:
--------------------
key: CA, value: San Francisco
key: MI, value: Detroit
key: FL, value: Jacksonvill
--------------------
[('CA', 'San Francisco'), ('FL', 'Jacksonvill'), ('MI', 'Detroit')]
--------------------
[('MI', 'Detroit'), ('FL', 'Jacksonvill'), ('CA', 'San Francisco')]
--------------------
CA San Francisco
FL Jacksonvill
MI Detroit
(2)由于字典中的元素具有特定的顺序,但没办法直接做到取第N个值。
#输入
cities = {'CA':'San Francisco','MI': 'Detroit',
'FL': 'Jacksonvill'}
print(cities[1])#输出报错
Traceback (most recent call last):File "c:\Users\Desktop\Python3_exercises\text39.py", line 3, in <module>print(cities[1])
KeyError: 1
(3)字典无法按照指定位置添加键值对。默认从尾部添加。
常见问题
- 列表和字典有哪些区别? 列表是元素的有序排列。而字典是把一些元素(称为“键”,keys)和另一些元素(称为“值”,values)匹配起来。
- 我能用字典做什么? 当你需要用一个东西去查另一个东西的时候。其实,你可以把字典称为“查询表”(look up tables)。
- 我能用列表做什么? 可以用于任何有序排列的东西,同时你只需要用数字索引来查找它们。
4.如果我需要一个字典,但我又想让它们有序排列怎么办呢? 参考常见问题中的sorted()函数。示例可见常见问题2
sorted()函数:
语法:
sorted(iterable, key=None,reverse=False)
参数说明:
(1)iterable:代表的是可迭代的对象。
(2) key=None:用来进行比较的元素,具体的值来源于可迭代的对象中。
(3)reverse=False:排序规则,reverse=False升序(默认),reverse=True降序。
5.字典可以转化为列表和元组,列表和元组不能转化为字典。
相关文章:
“笨办法”学Python 3 ——练习 39. 字典,可爱的字典
练习39 源代码 # create a mapping of state to abbreviation #创建一个州与缩写的映射 states {Oregon:OR,Florida:FL,California: CA, New York: NY,Michigan:MI} #创建一个字典,key为州名,value为州缩写#Create a basic set of states and some cit…...
模糊的照片如何修复清晰?
相信有很多人用手机拍照时,觉得拍出来的照片一定是很漂亮的,结果拍了之后,拿出来一看模糊一片,根本看不清是什么。或者是只显示一半另一半模糊一片。而这些精彩瞬间很多时候是无法重拍的。虽然谁也不想拍出的照片出现模糊…...
如何理解session、cookie、token的区别与联系?
session、cookie、token。 相信学过接口的朋友都特别熟悉了。 但是对我一个刚接触接口测试的小白来说,属实有点分不清楚。 下文就是我通过查阅各种资料总结出来的一点理解,不准确的地方还请各位指正。 (文末送洗浴中心流程指南)…...
【MyBatis】| MyBatis分页插件PageHelper
目录 一:MyBatis使⽤PageHelper 1. limit分⻚ 2. PageHelper插件 一:MyBatis使⽤PageHelper 1. limit分⻚ (1)概念: ①页码:pageNum(用户会发送请求,携带页码pageNum给服务器&am…...
Java枚举类详解
一、定义格式 public enum s { 枚举项1,枚举项2,枚举项3; } // 定义一个枚举类,用来表示春,夏,秋,冬这四个固定值 public enum Season {SPRING,SUMMER,AUTUMN,WINTER; } 二、枚举的特点 1、所有枚举类都是Enum的子类 2、我们可以通…...
C语言数组
一.数组定义 数组由数据类型相同的一系列元素组成 如 int main(){ float candy[365]; char code[12]; int states[50]; … } cnady是包含了365个float元素的数组。code是包含了12个char类型的数组。states包含了50个int类型的数组。 二.数组初始化和取值 我们使用花括号包含值&…...
Scala 入门(第一章Scala 环境搭建、插件的安装)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 第 1 章 Scala 入门1.1 概述1.1.1 为什么学习 Scala1.1.2 Scala 发展历史1.1.3 Scala 和 Java 关系1.1.4 Scala 语言特点1.2 Scala 环境搭建1.3 Scala 插件安装1.4 HelloWorl…...
math@多项式@求和式乘法@代数学基本定理
文章目录多项式求和式乘法应用代数学基本定理相关证明高次方程其他关于多项式的参考多项式求和式乘法 S∏j1(∑k1ajk) j∏j1m(∑k1njajk) jS\prod_{j1}\left(\sum\limits_{k1}a_{jk}\right)_{\!\!\!j} \\\prod_{j1}^{m}\left(\sum\limits_{k1}^{n_j}a_{jk}\r…...
Kafka系列之:基于SCRAM和Ranger机制完成动态新增kafka读写账号、赋予账号对指定Topic的读写权限
Kafka系列之:基于SCRAM和Ranger机制完成动态新增kafka读写账号、赋予账号对指定Topic的读写权限 一、需求背景二、添加写用户三、查看用户是否添加到zookeeper中四、查看用户五、赋予用户topic写权限六、生产者配置文件七、ranger给用户权限八、往Topic写数据九、删除添加的用…...
第五十三章 DFS进阶(一)——剪枝优化
第五十四章 DFS进阶(一)——剪枝优化一、什么是剪枝?二、剪枝优化的策略1、优化搜索顺序2、排除等效冗余3、可行性剪枝4、最优性剪枝5、记忆化搜索三、例题1、AcWing 165. 小猫爬山(DFS 剪枝优化)2、AcWing 167. 木棒…...
Java字节码深度知多少?
文章目录1、字节码结构1.1、基本结构1.2、实际观测2、内存表示3、方法调用指令4、invokedynamicEND结语Java真的是长盛不衰,拥有顽强的生命力。其中,字节码机制功不可没。字节码,就像是 Linux 的 ELF。有了它,JVM直接摇身一变&…...
【C++】智能指针(万字详解)
🌈欢迎来到C专栏~~智能指针 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤&…...
使用docker配置mysql主从复制
1.新建主服务器容器实例: docker run -p 3307:3306 --name mysql \ -v /docker/mysql/data:/var/lib/mysql \ -v /docker/mysql/conf:/etc/mysql/conf \ -v /docker/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORDroot \ -d mysql:5.7 设置容器卷之后…...
v3 异步组件及分包使用
1 app.vue <template> <!-- vue3异步组件必须使用suspense --> <Suspense> <template #default> <!-- 异步组件 --> <SyncVue></SyncVue> </template> <template v-slot:fallback> <!-- 优先显示骨架屏 --> <…...
实用调试技巧【上篇】
🔴本文章是在 Visual Studio 2022(VS2022)编译环境下进行操作讲解 文章目录🥳1. 什么是bug?🥳2.调试有多重要?2.1. 我们是如何写代码的?2.2.调试是什么?2.3.调试的基本步…...
JavaScript 教程
手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几…...
在SpringBoot里面使用原生的Servlet
在SpringBoot里面使用Servlet 首先在主程序中添加注解主程序添加ServletComponentScan // 加上这个注解之后就可以使用原生的组件了 HttpServlet 继承HttpServlet 重写方法 添加WebServlet 第一种方式使用注解 WebServlet(value "/helsk") public class HelloSe…...
商标被驳回,先别慌!挽回商标有办法
商标注册是一个漫长的等待过程,提交了注册申请之后不代表就能得心应手。商标局在接收到申请后,便会开始各阶段审查,面对不符合条件的商标会予以商标驳回。商标局基于什么原因而驳回注册申请呢?驳回后还有必要进行商标驳回复审吗?今天心周企…...
VMware安装Linux虚拟机后忘记root密码处理方法
OS版本:Red Hat 7.7 问题说明: 之前用VMWare安装了一台Linux虚机,由于长期没使用,导致忘记了root密码。所以需要修改root密码。 Root密码修改 现将修改root密码的操作步骤记录如下。 1.启动虚拟机,出现启动倒计时…...
Centos安装OpenResty
文章目录一. OpenResty是什么二. OpenResty的安装1. 安装开发库2. 安装OpenResty仓库3. 安装OpenResty4. 安装opm工具5. 目录结构6. 配置nginx的环境变量7. 启动和运行8. 配置文件修改三. 小案例1. 案例说明2. OpenResty监听请求3. 编写业务代码4. 获取请求参数一. OpenResty是…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!
【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...
