python学习——【第六弹】

前言

上一篇文章 python学习——【第五弹】中我们了解了python中的不可变序列元组,这篇文章接着介绍可变序列 字典

字典

字典的实现原理: 字典,顾名思义其实现原理和字典类似,字典中的元素都是key—value,以键值对的方式存储数据,因此python中的字典可以根据key来查找value的位置。并且字典中的key是唯一的不允许重复,但value是可以重复的。

字典的特点

1:字典是python的内置数据结构之一,是可变序列,并且可以任意嵌套,在原处的增删改等操作不会影响其id地址

2:字典属于无序序列,其每一项都是从左到右随机排序的,即保存在字典中的项是没有固定顺序的,因此无法在字典中指定位置插入元素

3:字典中的key必须是不可变对象,如字符串,元组,数值

4:字典也可以根据需要进行动态伸缩,但会浪费较大的内存,是一种空间换时间的数据结构

创建方式

1:创建字典最常用的方式就是使用花括号:
dict_name = {‘key_1’: ‘value_1’, ‘key_2’: ‘value_2’}

2:使用内置函数dict():
dict_name = dict(‘key_1’=‘value_1’, ‘key_2’=‘value_2’)

使用花括号创建字典:

scores={'join':100,'lisa':102,'tom':99}  #不使用内置函数dict()创建字典时,如果使用字符串作为键,需要在字符串两端加引号
print(scores,type(scores))
#{'join': 100, 'lisa': 102, 'tom': 99} <class 'dict'>

使用内置函数dict()创建字典:

scores1=dict(name='tom',age=20)   
print(scores1,type(scores1))
#{'name': 'tom', 'age': 20} <class 'dict'>

使用内置函数dict()创建字典时,若字符串作为键,不可在两端加引号。

在这里插入图片描述
空字典的创建:

list1=[1,2,3,4]
dict1={}
dict2=dict()
dict3=dict.fromkeys(list1)
#使用fromkeys()函数需要传入一个列表,使其中元素作为新字典的键,由于没有传值,因此字典值为空。
print(dict1,type(dict1),dict1.values())#{} <class 'dict'> dict_values([])
print(dict2,type(dict2))#{} <class 'dict'>
print(dict3,type(dict3),dict3.values())#{1: None, 2: None, 3: None, 4: None} <class 'dict'> dict_values([None, None, None, None])
any()可以检查字典的值是否为空,为空返回False
print(any(dict1.values()))# False
print(any(dict3.values()))# False

使用元组和列表创建字典:

yuanzu=(11,'aa',22,'bb')
list1=['cc',33,'dd',55]
new_dict={yuanzu:list1} 
print('元组和列表创建字典:', new_dict,type(new_dict))
#元组和列表创建字典: {(11, 'aa', 22, 'bb'): ['cc', 33, 'dd', 55]} <class 'dict'>

注意要将元组作为键,列表作为值才能创建字典;若将列表作为键,元组作为值会抛出TypeError的错误,因为字典中的key必须是不可变对象,如字符串,元组,数值

如果想让两个列表创建字典,需要借助zip()函数
使用zip()函数:

items = ['aiai', 'lili', 'nini']  
prices = [10, 20, 30]
d = {item: price for item, price in zip(items, prices)}
print(d, type(d))  # {'aiai': 10, 'lili': 20, 'nini': 30} <class 'dict'>
c = {item.upper(): price for item, price in zip(items, prices)}
print(c, type(c))  # {'AIAI': 10, 'LILI': 20, 'NINI': 30} <class 'dict'>

或者是直接使用新生成的zip对象生成字典

zip( ) 函数的第一个参数形成了字典中的键 (key),第二个参数形成了字典中的值 (value)。若zip( )中两列表长度不相同,则返回对象与最短列表的长度相同

list1=[1, 2, 3, 4]
list2=['a', 'b', 'c', 'd','p']
new_list=zip(list1, list2)#将list1和list2拼接后转换成zip对象
dictionary=dict(new_list)#将zip对象转换成字典
print(dictionary, type(dictionary))  # {1: 'a', 2: 'b', 3: 'c', 4: 'd'} <class 'dict'>

字典元素获取方式

​1: []方法 举例: dict_name[‘key’]

2: get()方法 举例: dict_name.get(‘key’)

两者取值的区别

[]方法:如果字典中不存在指定的key, 抛出keyError异常

get()方法:如果字典中不存在指定的key,
不会抛出keyError的异常,而是返回None,并且可以通过参数设置默认的value,以便指定的key不存在时返回​。

scores={'join':100,'lisa':102,'tom':99}
# print('scores中的om:',scores['om']) # scores['om']  输出 KeyError: 'om'
print('scores中的tom:',scores['tom'])  #scores中的tom: 99
print('scores中的susan:',scores.get('susan'))  # None
print('scores中不存在的元素:',scores.get('lili',99))  #输出99  在字典中所在位置查找的元素不存在时默认输出指定位置的索引

字典中的key

key的判断:

in --》‘kay’ in dict_name —》 指定的key在字典中返回True,不存在返回False

not in —》‘kay’ not in dict_name --》指定的key在字典中不存在返回True,存在返回False

dire1={'lili':1,'kaka':23,'lala':99,'didi':10}
print('lili' in dire1)  #True
print('lili' not in dire1) #False

获取字典中的键、值

dire1={'lili':10,'lisa':11,'kaka':12}
key1=dire1.keys()
print(key1) #dict_keys(['lili', 'lisa', 'kaka'])
print(type(key1)) # <class 'dict_keys'>
print(list(key1))  #将所有的key组成的视图转成列表  ['lili', 'lisa', 'kaka']
print(tuple(key1)) #将所有的key组成的视图转成元组  ('lili', 'lisa', 'kaka')
print(set(key1))#将所有的key组成的视图转成集合 {'lili', 'kaka', 'lisa'}
#获取所有的value
dire1={'lili':10,'lisa':11,'kaka':12}
value1=dire1.values()
print(value1) #dict_values([10, 11, 12])
print(type(value1)) #<class 'dict_values'>
print(list(value1))  #将所有的value值组成的视图转换成列表[10, 11, 12]
print(tuple(value1))  #将所有的value值组成的视图转换成元组(10, 11, 12)
print(set(value1))    #将所有的value值组成的视图转换成集合{10, 11, 12}
# 获取所有的key-value对
dire1={'lili':10,'lisa':11,'kaka':12}
items=dire1.items()
print(items) #dict_items([('lili', 10), ('lisa', 11), ('kaka', 12)])
print(list(items)) #[('lili', 10), ('lisa', 11), ('kaka', 12)]  转换之后的列表元素是由元组组成的

# 根据相同的值来获取不同的键
dicts={'Math':100,'Chinese':100,'Engish':90}
keys=[k for k,v in dicts.items() if v==100]
print('值为100的键有:',keys)  #值为100的键有: ['Math', 'Chinese']

字典元素的遍历

使用键值对遍历

dire1={'lili':11,'lala':22,'caca':23}
for item in  dire1.items():
    print(item)
'''
('lili', 11)
('lala', 22)
('caca', 23)
'''
dire1={'lili':11,'lala':22,'caca':23}
for key,value in dire1.items():
    print(key,"的年龄是:",value)
'''
lili 的年龄是: 11
lala 的年龄是: 22
caca 的年龄是: 23
'''

遍历字典的键:

dire1={'lili':11,'lala':22,'caca':23}
for keys in dire1.keys():
    print(keys)
'''
lili
lala
caca
'''

遍历字典的值:

dire1={'lili':11,'lala':22,'caca':23}
for values in dire1.values():
    print(values)
'''
11
22
23
''' 

向字典中增加元素

dire2={'cici':12,'dodo':13,'cici':11,'qiqi':10}
print('新增前dire2的字典:',dire2,id(dire2))  #增加前dire2的字典: {'cici': 11, 'dodo': 13, 'qiqi': 10} 140215317019616
dire2['kiki']=20 #默认再字典元素末尾新增一个元素
print('新增元素后的字典:',dire2,id(dire2))  #增加元素后的字典: {'cici': 11, 'dodo': 13, 'qiqi': 10, 'kiki': 20} 140215317019616

给字典删除元素

dire1={'lili':1,'kaka':23,'lala':99,'didi':10}
print('删除前dire1字典:',dire1,id(dire1))  #删除前dire1字典: {'lili': 1, 'kaka': 23, 'lala': 99, 'didi': 10} 140215317019536
del dire1['lili']
print('删除指定元素后的dire1字典:',dire1,id(dire1))#删除指定元素后的dire1字典: {'kaka': 23, 'lala': 99, 'didi': 10} 140215317019536

修改字典中的元素

# 修改字典相应键的值
dire2={'cici':12,'dodo':13,'cici':11,'qiqi':10}
dire2['cici']=55
print('修改值后的字典:',dire2)  #修改值后的字典: {'cici': 55, 'dodo': 13, 'qiqi': 10, 'kiki': 20}

每篇一语

工欲善其事,必先利其器!
如有不足,感谢指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作系统学习笔记 ---- 网络系统

1 DMA技术 直接内存访问&#xff08;Direct Memory Access&#xff09; 技术。 在进行 I/O 设备和内存的数据传输的时候&#xff0c;数据搬运的工作全部交给 DMA 控制器&#xff0c;而 CPU 不再参与任何与数据搬运相关的事情&#xff0c;这样 CPU 就可以去处理别的事务。 DM…

js逆向学习、安卓逆向

JS基础 提示信息 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn 安卓逆向 1.模拟器环境搭建 Magisk 是一套用于定制 Android 的开源软件&#xff0c;支持高于 Android 5.0 的设备。 以下是一些功能亮点&#xff1a; MagiskSU&#xff1a;为应用程序提供 root 访…

什么是 .com 域名?含义和用途又是什么?

随着网络的发展&#xff0c;网络上出现了各种不同后缀的域名&#xff0c;这些域名的后缀各有不同的含义&#xff0c;也有不同的用途。今天&#xff0c;我们就一起来探讨一下 .com 后缀的域名知识。 .com 域名是一种最常见的顶级域名&#xff0c;它是由美国国家网络信息中心&…

第3章 多层感知器

这章节我们来解决的问题是&#xff1a;如何使用神经网络实现逻辑电路中的“异或门”模型&#xff1f;如下图&#xff1a;根据第2章我们知道&#xff0c;单层感知器是能够解决“与门”、“或门”、“非门”这些简单的线性问题&#xff0c;但是不能解决“异或门”这类非线性问题。…

内存函数的简单实用

本篇要分享的是常见的内存函数 前面分享的函数都是和字符串相关&#xff0c;但是当我们在操作数据的时候不仅仅要操作字符数据 接下来分享几个与内存相关的函数 目录 本篇要分享的是常见的内存函数 1.memcpy 2.memmove 自定函数模拟实现memmove函数 3.memcmp 4.memset …

【算法经典题集】DP和枚举(持续更新~~~)

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;算法经典题集&#x1f50a;本专栏涉及到的知识点或者题目是算法专栏的补充与应用&#x1f4aa;种一棵树最好是十年前其次是现在DPDP就是动态规划&a…

Web前端 JS WebAPI

1、操作DOM 1.1、什么DOM&#xff1f; DOM&#xff08;Document Object Model——文档对象模型&#xff09;&#xff1a;DOM是浏览器提供的一套专门用来操作网页内容的功能 DOM作用&#xff1a;开发网页内容特效和实现用户交互 DOM树是什么&#xff1f; 将 HTML 文档以树状…

手把手教你使用vue创建第一个vis.js

先看一下实现效果吧 &#xff0c;如下图 &#xff1a; 为什么要写这篇文章呢&#xff1f;因为之前有浅浅的了解一下vis.js&#xff0c;后期开发中没有使用vis&#xff0c;所以太深奥的也不懂&#xff0c;但是当时是用js写的。这两天有人问我用vue怎么写&#xff0c;然后说看到…

减治法实现插入排序,减治法实现二叉查找树(二叉搜索数,二叉排序数)的创建、插入与查找(含解析与代码实现)

&#x1f38a;【数据结构与算法】专题正在持续更新中&#xff0c;各种数据结构的创建原理与运用✨&#xff0c;经典算法的解析✨都在这儿&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 -…

嵌入式软件开发之Linux下C编程

目录 前沿 Hello World&#xff01; 编写代码 编译代码 GCC编译器 gcc 命令 编译错误警告 编译流程 Makefile 基础 何为 Makefile Makefile 的引入 前沿 在 Windows 下我们可以使用各种各样的 IDE 进行编程&#xff0c;比如强大的 Visual Studio。但是在Ubuntu 下如何进…

【Java版oj】day10 井字棋、密码强度等级

目录 一、井字棋 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、密码强度等级 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 一、井字棋 &a…

CAT8网线测试仪使用中:线缆的抗干扰参数解读以及线缆工艺改进注意事项

FLUKE Agent platform -深圳维信&#xff0c;带你更深入的了解铜缆测试&#xff0c;详细为您讲解什么是TCL/ELTCL&#xff0c;他们对数据的传输到底有什么影响呢&#xff1f; 前情分析&#xff1a;为什么用双绞线传输信号&#xff1f;&#xff08;一图就懂&#xff09; TCL&a…

【深度解刨C语言】符号篇(全)

文章目录一.注释二.续行符与转义符1.续行符2.转义符三.回车与换行四.逻辑操作符五.位操作符和移位操作符六.前置与后置七.字符与字符串八./和%1.四种取整方式2.取模与取余的区别和联系3./两边异号的情况1.左正右负2.左负右正九.运算符的优先级一.注释 注释的两种符号&#xff…

Sentinel

SentinelSentinel介绍什么是Sentinel?为什么需要流量控制&#xff1f;为什么需要熔断降级&#xff1f;一些普遍的使用场景本文介绍参考&#xff1a;Sentinel官网《Spring Cloud Alibaba 从入门到实战.pdf》Sentinel下载/安装项目演示构建项目控制台概览演示之前需先明确&#…

【webrtc】ICE 到VCMPacket的视频内存分配

ice的数据会在DataPacket 构造是进行内存分配和拷贝而后DataPacket 会传递给rtc模块处理rtc模块使用DataPacket 构造rtp包最终会给到OnReceivedPayloadData 进行rtp组帧。吊炸天的是DataPacket 竟然没有声明析构方法。RtpVideoStreamReceiver::OnReceivedPayloadData 的内存是外…

3.网络爬虫——Requests模块get请求与实战

Requests模块get请求与实战requests简介&#xff1a;检查数据请求数据保存数据前言&#xff1a; 前两章我们介绍了爬虫和HTML的组成&#xff0c;方便我们后续爬虫学习&#xff0c;今天就教大家怎么去爬取一个网站的源代码&#xff08;后面学习中就能从源码中找到我们想要的数据…

普通Java工程师 VS 优秀架构师

1 核心能力 1.1 要成为一名优秀的Java架构师 只懂技术还远远不够&#xff0c;懂技术/懂业务/懂管理的综合型人才&#xff0c;才是技术团队中的绝对核心。 不仅仅是架构师&#xff0c;所有的技术高端岗位&#xff0c;对人才的综合能力都有较高的标准。 架构路线的总设计师 规…

安卓渐变的背景框实现

安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合&#xff0c;这是最推荐的方法&#xff0c;也是最有效的。2.利用canvas裁剪实现&#xff0c;这个方法有个缺陷&#xff0c;就是圆角会出现毛边&#xff0c;也就是锯齿。3.利用layer绘制边框1.背景 万…

多线程案例——阻塞队列

目录 一、阻塞队列 1. 生产者消费者模型 &#xff08;1&#xff09;解耦合 &#xff08;2&#xff09;“削峰填谷” 2. 标准库中的阻塞队列 3. 自己实现一个阻塞队列&#xff08;代码&#xff09; 4. 自己实现生产者消费者模型&#xff08;代码&#xff09; 一、阻塞队列…

【Pytorch】 理解张量Tensor

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 这是目录张量Tensor是什么&#xff1f;张量的创建为什么要用张量Tensor呢&#xff1f;总结张量Tensor是什么&#xff1f; 在深度学习中&#xff0c;我们经常会遇到一个概念&#xff…
最新文章