Python基础Day5
一、字典
①字典是python的基础数据类型之一
②字典可以存储大量的数据,关系型数据
③字典也是python中唯一的映射类的数据类型
字典是以键值对的形式存在的,{键:值}
字典的键必须是不可变的数据类型(工作中一般是由int和str组成)
字典的值是任意数据类型,对象
数据类型的分类:
(不可哈希)可变的数据类型:列表(list)、字典(dict)、集合(set)
(可哈希) 不可变的数据类型:字符串(str)、整型(int)、布尔值(bool)、元组(tuple)
按存值个数区分:
标量/原子类型:整型、字符串
容器类型:列表、元组、字典
按访问顺序区分:
直接访问:整型
顺序访问(序列类型):字符串、列表、元组
key值访问(映射类型):字典
字典的优点:
① 字典可以存储大量的数据,关系型数据。
② 查询速度快
python3.5版本及之前版本的字典是无需的,python3.6开始字典是有序的
字典的查询(抛去小数据池的概念),任何对象的ID都不一样,字典将所用的键在内存中转为为ID,直接通过ID找到对应的值
字典是用哈希算法,比二分查找要快很多
二、字典的增删改查
# 字典的格式
dic = {'name':'xiaoming','age':18,'hobby':'football','city':'Shenzhen'}
增加
① 直接加 (前提是无相同的key值,否则会变成修改)
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
dic1['constellation'] = 'sagittarius' # 添加键值对
print(dic1)
# 结果
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'constellation': 'sagittarius'}
② setdefault()
key存在的话不会做任何修改,返回键对应的值;
key不存在的话会添加键值对,只填key默认的值是None,返回值是None
key不存在的话会添加键值对,key和value都添加,返回值是value
① 键key已存在
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('name','Zhangsan')) # 返回key对应的值,不做任何的修改
print(dic1)
# 结果
xiaoming
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('age'))
print(dic1)
# 结果
18
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
②键key不存在,只添加键key
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('job')) # 只添加key默认的值是None
print(dic1)
# 结果
None
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': None}
③键key不存在,添加键值对
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing'}
print(dic1.setdefault('job','IT')) # 返回key对应的值
print(dic1)
# 结果
IT
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}
删除
①pop()
pop()通过键key去删除键值对,有返回值,返回值是被删除键key对应的值value
如果没有此键key,没有设置第二个参数,则会报错
如果没有此键key,设置了第二个参数,返回第二个参数
键key存在
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('job','已删除')) # 返回key对应的值,不会返回第二个参数
print(dic1)
# 结果
IT
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
键key不存在
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('a'))
# 报错
KeyError: 'a'
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.pop('a','该键key不存在')) # 返回值是第二个参数的内容
print(dic1)
# 结果
该键key不存在
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing', 'job': 'IT'}
② clear() # 清空字典
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1)
# 结果
{}
③ popitem()
python3.5版本及之前是随机删除一组键值对,python3.6是删除最后一组的键值对
返回值是被删除的键key和值value的元组
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
print(dic1.popitem()) # 返回键key和值value的组成的元组
print(dic1)
# 结果
('job', 'IT')
{'name': 'xiaoming', 'age': 18, 'hobby': 'football', 'city': 'Beijing'}
④ del
a.可以通过键key删除对应的键值对
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
del dic1['hobby']
print(dic1)
# 结果
{'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
b.可以在内存级别把整个字典删除
dic1 = {'name':'xiaoming','age':18 ,'hobby':'football','city':'Beijing','job':'IT'}
del dic1
print(dic1)
# 报错
NameError: name 'dic1' is not defined
修改
①直接修改
通过键key来修改值value
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic1['job'] = 'accountant' # 通过键key直接修改对应的值value
print(dic1)
# 结果
{'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
② update()
方式一:
字典1.update(字典2) 将字典2的所有键值对覆盖并添加到dic1,dic2不变
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic2 = {'age':20 , 'city':'Shanghai','a':3}
dic1.update(dic2) # 将dic2的所有键值对覆盖并添加到dic1,dic2不变
print(dic1)
print(dic2)
# 结果
{'name': 'xiaoming', 'age': 20, 'city': 'Shanghai', 'job': 'IT', 'a': 3}
{'age': 20, 'city': 'Shanghai', 'a': 3}
方式二:
update(键=值)
键key存在会直接修改key对应的值,不存在key则直接添加键值对
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
dic1.update(name='Zhangsan',constellation='sagittarius') # 键存在会直接修改值,不存在直接添加键值对
print(dic1)
# 结果
{'name': 'Zhangsan', 'age': 18, 'city': 'Beijing', 'job': 'IT', 'constellation': 'sagittarius'}
查询
① 通过键查询
若键不存在会报错
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1['name'])
# 结果
xiaoming
② get()
通过键key查询值,键key不存在不会报错
方式一:
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get('name'))
print(dic1.get(111)) # 键不存在不会报错,返回值是None
# 结果
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get('name'))
print(dic1.get(111)) # 键不存在不会报错,返回值是None
方式二:
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.get(111,'该键不存在')) # 键不存在不会报错,返回值是第二个参数,不写第二个参数默认是None
# 结果
该键不存在
③keys()
把字典所有的键放在类似于列表的容器中
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.keys())
# 结果
dict_keys(['name', 'age', 'city', 'job'])
可以转化成列表list
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.keys())
print(lis)
# 结果
['name', 'age', 'city', 'job']
可以遍历
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1.keys():
print(i)
# 结果
name
age
city
job
直接遍历字典也能获取所有的键
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1:
print(i)
# 结果
name
age
city
job
④ values()
把字典的所有值放在类似列表的容器中
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.values())
# 结果
dict_values(['xiaoming', 18, 'Beijing', 'IT'])
可以转化为列表list
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.values())
print(lis)
# 结果
['xiaoming', 18, 'Beijing', 'IT']
⑤ items()
把键和值组成元组放在类似于列表的容器中
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(dic1.items())
# 结果
dict_items([('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')])
可以转换为列表list
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
lis = list(dic1.items())
print(lis)
# 结果
[('name', 'xiaoming'), ('age', 18), ('city', 'Beijing'), ('job', 'IT')]
可以遍历(一个变量遍历出来的是键值对组成的元组)
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for i in dic1.items():
print(i)
# 结果
('name', 'xiaoming')
('age', 18)
('city', 'Beijing')
('job', 'IT')
两个遍历遍历出来的分别是键和值
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
for k,v in dic1.items():
print(k,v)
# 结果
name xiaoming
age 18
city Beijing
job IT
三、字典的公共方法
dic1 = {'name': 'xiaoming', 'age': 18, 'city': 'Beijing', 'job': 'IT'}
print(len(dic1)) # 获取字典键值对的个数
# 结果
4
四、分别赋值
a,b = 10,20 # 将a和b分别赋值
print(a,b) # 结果
10 20
a,b = [10,30] # 将a和b分别赋值
print(a,b) # 结果
10 30
a = 100
b = 50
a,b = b,a # a 和 b 的值替换了
print(a,b) # 结果
50 100
五、字典的嵌套
Python基础Day5的更多相关文章
- python基础 Day5
python Day5 字典 其他数据类型的缺点 列表可以存储大量的数据,但是关联性不强. 列表的查询速度比较慢 其容器的数据类型为dict 其数据类型的分类 可变(不可哈希)的数据类型:list d ...
- 第五章:Python基础の生成器、迭代器、序列化和虚拟环境的应用
本课主题 生成器介紹和操作实战 迭代器介紹和操作实战 序例化和反序例化 Json 和 Pickle 操作实战 字符串格式化的应用 创建虚拟环境实战 本周作业 生成器介紹和操作实战 什么是生成器,生成器 ...
- Python基础学习总结(持续更新)
https://www.cnblogs.com/jin-xin/articles/7459977.html 嗯,学完一天,白天上班,眼睛要瞎了= = DAY1 1,计算机基础. CPU:相当于人的大脑 ...
- python基础-基础知识(包括:函数递归等知识)
老男孩 Python 基础知识练习(三) 1.列举布尔值为 False 的值空,None,0, False, ", [], {}, () 2.写函数:根据范围获取其中 3 和 7 整除的所有 ...
- Python基础 小白[7天]入门笔记
笔记来源 Day-1 基础知识(注释.输入.输出.循环.数据类型.随机数) #-*- codeing = utf-8 -*- #@Time : 2020/7/11 11:38 #@Author : H ...
- python之最强王者(2)——python基础语法
背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- Python小白的发展之路之Python基础(一)
Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...
- Python之路3【第一篇】Python基础
本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...
随机推荐
- Swift 4.0 + Ipad开发项目中值得注意知识点
1.注意Xib的约束和代码的约束,注意适配问题: 2.设置view的frame可以使用view.frame.maxX实现布局: 3.UIStackView在xib中的使用,可以很好的实现约束,布局和屏 ...
- velocity 自定义工具类接入
网上的教程几乎都是同一篇: velocity 自定义工具类 - eggtk - CSDN 博客 但是教程有不完善的地方,我就补充一下. 补充: 引入的jar包和版本要一致.我们项目中因为没有定义确切版 ...
- Appium移动自动化测试-----(六)3.AppiumDesktop功能描述
一般功能 这些能力跨越多个驱动因素. 能力 描述 值 automationName 使用哪个自动化引擎 Appium(默认)或Selendroid或者UiAutomator2或者Espresso对于A ...
- 消息中间件——RabbitMQ(十)RabbitMQ整合SpringBoot实战!(全)
前言 1. SpringBoot整合配置详解 publisher-confirms,实现一个监听器用于监听Broker端给我们返回的确认请求:RabbitTemplate.ConfirmCallbac ...
- STL源码剖析——iterators与trait编程#2 Traits编程技法
在算法中运用迭代器时,很可能用到其相应类型.什么是相应类型?迭代器所指对象的类型便是其中一个.我曾有一个错误的理解,那就是认为相应类型就是迭代器所指对象的类型,其实不然,相应类型是一个大的类别,迭代器 ...
- QT release版QAudioDeviceInfo获取不到音频设备,而debug版可以获取到
新添加了两个模块:QCharts和Multimedia 但自己没有重新打包更新里面的库文件什么的... 坑爹... 害我找了这么久... 解决办法: 方法一: 将Qt安装目录下的plugins文件夹中 ...
- MySQL新项目如何确保上线安全
大纲 DBA最应该做的事情 新项目开发环境应该注意什么 功能测试和压力测试MySQL DBA关注点 线上环境关注点 业务在大压力情况下,MySQL如何能活下来 DBA最应该做的事情 备份 建议每天全备 ...
- Codeforces-975C - Valhalla Siege 前缀和 思维
C. Valhalla Siege time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- WPF不同方式快捷键判断
private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { //单个按键e.Key方式判断 if (e.Key == Key ...
- 使用async和await的异步编程
异步编程模型(TAP)提供了抽象的异步代码.异步代码看起来和同步代码没什么大的区别,无非多个了两个关键字(async和await).但是代码的执行顺序并没看起来那么简单,代码的执行顺序根据cpu资源的 ...