Python基础(四)--字典与集合

                           Python基础(四)--字典与集合

1 字典

1.1 什么是字典

字典提供的是一种映射存储的方式。字典分为两个部分,一个是键(key),一个是key所关联的值(value)。,一个键关联(或绑定)一个值,称为键值对。字典就是以键值对的形式来存储数据的。

1.2 字典的创建

(1)使用键值对创建:d = {“a”: “aaa”, “b”: “bbb”}

(2)使用元组的列表创建:d = dict(zip(iter1, iter2)) 或 d = dict([(“a”, “aaa”), (“b”, “bbb”)])

(3)使用dict()函数创建:d = dict(a=“aaa”, b=“bbb”)

# 创建空字典
d = {}
print(type(d))
# 使用键值对创建,字典的键值之间用:分隔,键值对之间用,分隔
d = {"a":"aaa", "b":"bbb"}
print(d)
# 使用元组的列表创建,提供含有元组的列表,列表中的内个元素都是一个元组,每个元组含有两个元素,
# 索引为0的元素指定key(键),索引为1的元素指定为value
d = dict([("a", "aaa"), ("b", "bbb")])
print(d)
# 使用zip
a = [1,2,3]
b = ['a','b','c']
d = dict(zip(a,b))
print(d)
# 使用dict()函数创建:
d = dict(a="aaa", b="bbb")
print(d)
# 查找key所对应的value,不存在则报错
print(d["a"])
# 给字典新增或修改键,取决于字典中是否存在指定的key,不存在则新增,存在则更新
d["c"]="ccc"
print(d)

1.3 字典的特征

(1)字典的键必须是不可变,可哈希的类型

(2)字典的键是不可重复的,如果重复存储的时候没问题,但是查找的时候会出问题,不知道查找哪一个

(3)字典中的键值对不保证有序性

注意:不同的key不一定产生不同的哈希码,但是不同的key产生不同的哈希码能够减少哈希冲突。哈希冲突的解决方式就是加上一个链,再冲突再产生一个链。在查找的时候就要进行比较

d = {"a":"aaa", "b":"bbb"}
# 字典的键必须是不可变,可哈希的类型
li = [1,2,3]
# d[li] = "list" 列表是不可哈希的类型,因为列表是可变的类型,所以这是错误的
# 字典的键是不能重复的
d = {"a":"aaa", "a":"bbb"}
print(d)

1.4 常用方法

方法名描述

get(key[, default])

返回键所绑定的值,第二个参数当键不存在时返回的值。与x[key]的区别在于,get在键不存在的时候不会产生错误,返回None

pop(key[, default])

删除与参数指定的键相同的值,返回该键所绑定的值,如果指定的键不存在,则会产生错误。
keys()返回字典中所有键key
values()返回字典中所有的值value
items()返回字典中所有的键值对,每个键值对为一个元组
clear()删除字典中所有的键值对
setdefault(key[, default]))指定key与value,默认为None,如果字典中不存在key,则将key与value键值对加入到字典中,如果字典中key已经存在,则不进行操作。方法返回key所对应的value
update([E,]**F)使用参数指定的字典,更新当前的字典
popitem()随便删除字典中的一组键值对,返回删除键值对的元组
fromkeys(iterable,value=None)创建一个新的字典,使用参数(可迭代对象)中每一个元素作为key,第二个参数作为所有key的value,没提供默认为None
copy()对当前字典进行复制

1.5 字典的运算

符号

说明

e in x

如果x中存在e键,返回True,否则返回False。

e not in x

如果x中不存在e键,返回True,否则返回False。

x 比较 y

  • 比较两个字典中的键值对(==,!=)
  • 判断两个字典是否为同一个字典(is,is not)

x 布尔 y

与数值类型的布尔运算规则相同(返回两个字典中的一个)

字典不支持 >= 与 <= 运算。len函数也可以应用与字典类型,返回字典中键值对的个数。

 

1.6 字典遍历

(1)使用keys方法遍历

(2)使用item方法遍历(一种是for中使用元组变量,另外一种是for中使用两个变量,元组拆包)

d = {"a":"aaa","b":"bbb","c":"ccc"}
# 字典的遍历
for k in d.keys():print(k,end=" ")
print()for i in d.items():print(i[0], i[1],end=" ")
print()for a,b in d.items():print(a,b, end=" ")
print()

1.7 字典推导式

当我们需要创建一个字典,其键与值存在于其他字典(或可迭代对象)中时,我们就可以使用字典推导式来完成。

# 字典的推导式
li = list(range(1,10))
d = {k:k+1 for k in li}
print(d)

2 集合

2.1 什么是集合

集合可以包含一组元素,与字典类似,也是使用{}来表示。不同的是,字典存储的是一组键值对,而集合存储的是单一元素。

2.2 集合的特征

(1)集合中不能有重复的元素

(2)集合中不保证元素是有顺序的

(3)集合中的元素必须是可哈希类型

2.3 集合的创建

集合存储的是单一元素。如:s = {1, 2, 3}

如果在创建集合时,指定了重复的元素,则重复的元素会自动的去除。如果想要创建一个空的集合,不能使用:

s = {}而是需要使用:s = set()。因为前者创建的不是空的集合,而是空的字典。

# 集合使用set表示
# 集合类型与字典一样使用{}表示,但是字典存储的是键值对,而集合存储的是单一元素
s = {"a","aaa"}
print(type(s))
# {}表示一个空字典而不是空集合
print(type({}))
# 创建空集合的方式是使用set函数
print(type(set()))

2.4 常用方法

方法名描述
add(elem)向集合中插入参数指定的元素
remove(elem)删除集合中参数指定的元素,元素不存在则产生错误
discard(elem)删除集合中参数指定的元素,元素不存在则不进行操作
pop()删除并返回集合中的任意一个元素
clear()删除集合中的所有元素
copy()对集合进行复制并返回
difference(*s)返回当前集合中存在,但是参数集合中不存在的元素,以集合返回两个集合的差集,当前集合不会发生改变
difference_update(*s)功能与difference相同,但是会改变当前的集合
intersection(*s)返回当前集合中存在,也在参数集合中存在的元素,以集合返回两个集合的交集,当前集合不会发生改变
intersection_update(*s)功能与intersection相同,但是会改变当前的集合
union(*s)返回在当前集合中,或者在参数集合中的元素,以集合返回两个集合的并集,当前集合不会发生改变
update(*s)功能与union相同,但是会改变当前的集合
symmetric_difference(s)返回在当前集合中存在,或者在参数集合中存在的元素,但是不同时在两个集合中的元素,以集合返回两个集合的对称差集集,当前集合不会发生改变
symmetric_difference_update(s)功能与symmetric_difference相同,但是会改变当前的集合
isdisjoint(s)判断当前集合与参数集合是否交集为空,是则返回True,否则返回False
issubset(s)判断当前集合是否是参数集合的子集,是则返回True,否则返回False
issuperset(s)判断当前集合是否是参数集合的父集,是则返回True,否则返回False

2.5 集合的运算

符号

说明

e in x

如果x中存在e键,返回True,否则返回False。

e not in x

如果x中不存在e键,返回True,否则返回False。

x & y

返回x与y的交集,相当于x. intersection(y)。

x | y

返回x与y的并集,相当于x.union(y)。

x - y

返回x与y的差集,相当于x. difference(y)。

x ^ y

返回x与y的对称差集,相当于x. symmetric_difference(y)。

x 比较 y

  • 比较两个集合中的元素是否一致(==,!=)。
  • 比较x是否为y的父集(子集)(>,>=,<=,<)
  • 判断两个集合是否为同一个集合(is,is not)

x 布尔 y

与数值类型的布尔运算规则相同(返回两个集合中的一个)

2.6 集合推导式

# 集合推倒式
s = {i for i in range(10)}
print(s)

3 布尔类型转换与格式化输出

3.1 布尔类型转换

在Python中,任意类型都能够转换为布尔类型(我们可以通过bool函数进行转换),因此,任意类型都可以作为if或while的表达式中进行条件判断。不过,我们没有必要进行显式的转换,一切类型判断都可以隐式进行。

类型

True

False

int

非0值

0

float

非0值

0.0

complex

非0值

0j

序列(list,tuple,str,bytes)

非空序列(至少一个元素)

空序列(没有元素)

dict

非空字典(至少一组键值对)

空字典(没有键值对)

set

非空集合(至少一个元素)

空集合(没有元素)

3.2 格式化输出

(1)%的形式---旧式格式化

在字符串对象后,可以使用%来进行格式化,格式如下:

    格式化字符串%(值的元组或字典)

格式化字符串中的占位符格式为:% [(关键字)][转换标记][最小宽度][.精度]转换格式

其中,%与转换类型是必选的,其他是可选的。

①%:指出这是占位符的开始。②关键字:用于匹配字典中的键,使用键所对应的值替换。③转换标记:可以指定“#”,“+”,“-”,“0”,“ ”(空格)。④最小宽度:指定数值最小占用的宽度。⑤.精度:指定小数的位数(注意前面存在小数点)。⑥转换类型:指定具体要转换成哪种类型表示。

转换格式如下:

格式

说明

d,i,u

有符号十进制格式。其中u已经不建议再使用。

o

有符号八进制格式。

x

有符号十六进制格式。(10 ~ 15使用a ~ f)

X

有符号十六进制格式。(10 ~ 15使用A ~ F)

f

浮点格式,精度默认为6。(NaN与无穷大会显示为nan与inf)

F

浮点格式,精度默认为6。(NaN与无穷大会显示为NAN与INF)

e

科学计数法格式,精度默认为6(指数使用e)。

E

科学计数法格式,精度默认为6(指数使用E)。

g

假设将数值转换成指数格式,如果数值指数值小于-4或者大于等于精度值(默认为6),则使用科学计数法格式,否则使用浮点格式(指数使用e)。

G

假设将数值转换成指数格式,如果数值指数值小于-4或者大于等于精度值(默认为6),则使用科学计数法格式,否则使用浮点格式(指数使用E)。

c

单字符格式,可以是单个字符或者整数值。

a

将Python对象使用ascii函数转换成字符串格式。

s

将Python对象使用str函数转换成字符串格式。

r

将Python对象使用repr函数转换成字符串格式。

%

转换成普通的%字符

 

转换标记如下:

标记

说明

#

  • 在八进制或十六进制前添加前缀。
  • 在f,F,e,E格式下会始终保留小数点(即使没有小数)。
  • 在g,G模式下会始终保留小数点(即使没有小数),同时,不会像其他情况下那样删除尾部的0。

‘ ‘(空格)

对正数,会留出一个空格。

+

对数值类型,会在前面添加一个+或-。如果与‘ ’(空格)同时指定,会覆盖‘ ’(空格)的设置。

0

对数值类型,如果宽度不足,左侧使用0填充。

-

对结果左对齐。如果与0同时指定,会覆盖0的设置。

使用关键字当提供关键字时,替换值需要提供一个字典类型。使用字典中key与关键字匹配,然后提取key对应的value进行替换。

动态模板:最小宽度与精度可以指定*值,表示使用元组中下一个值来指定宽度或精度。这有利于我们动态来指定数值,让格式化字符串(模板)更加灵活。

(2)str类的format---新式格式化

从Python2.6(Python2版本)与Python3.0(Python3版本)起,str可以使用format方法来进行格式化,相比于以前的%形式,这种方式称为新式格式化。形式为:

    格式化字符串.format(替换值)

格式化字符串使用{}作为占位符,然后使用format方法的参数进行替换。占位符的格式如下:

    {[字段名][!转换类型][:格式说明]}

三个部分都是可选的。

(3)格式化字符串常量

 

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

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

相关文章

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)

文章目录1. 导入包2. 数据预览2. 特征组合3. 建模4. 训练5. 预测练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;RNN/GRU/LSTM&#xff09; [Kaggle] Spam/Ham Email Classifi…

电商网站(Django框架)—— 大纲内容与基本功能分析

1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html 5. 用户认证模型 注意&#xff1a; AUTH_USER_MODEL配置参数要在第一次迁移数据库之…

Python基础(五)--函数

目录 Python基础&#xff08;五&#xff09;--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参数的默认值 3.1 可选参数 3.2 参数的默认值 4 位置参数与关键字参数 4.1 关键…

LeetCode 1024. 视频拼接(动态规划/贪心)

文章目录1. 题目2. 解题2.1 动态规划2.2 贪心1. 题目 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 视频片段 clips[i] 都用区间进行表示&#xff1a;开始于 clips[i][0] 并于 clip…

电商网站(Django框架)—— 思维导图

1.用户模块&#xff1a;注册、登录、激活、退出、个人中心、地址 2.商品模块&#xff1a;首页、详情、列表、搜索 3.购物车&#xff1a; 增加、删除、修改、查询 4. 订单模块&#xff1a;确认订单页面、提交订单&#xff08;下单&#xff09;、请求支付、查询支付结果、评论 5.…

Python基础(六)--类与对象

目录 Python基础&#xff08;六&#xff09;--类与对象 1 类与对象的基本概念 1.1 什么是对象 1.2 什么是类 1.3 类与对象的关系 2 定义与初始化 2.1 类的定义 2.2 对象的初始化 2.3 动态增加属性方法 3 类成员 3.1 类属性与实例属性 3.2 类方法与实例方法 3.3 静态…

HTTP和HTTPS的请求和响应

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff1a;是一种发布和接收 HTML页面的方法。 HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;简单讲是HTTP的安全版&#xff0c;在HTTP下加入…

LeetCode 794. 有效的井字游戏(分类讨论)

文章目录1. 题目2. 解题1. 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中&#xff0c;玩家有可能将字符放置成游戏板所显示的状态时&#xff0c;才返回 true。 该游戏板是一个 3 x 3 数组&#xff0c;由字符 " "&#xff0c;"X&quo…

Requests: 让 HTTP 服务人类

Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 Requests的文档非常完备&#xff0c;中文文档也相当不错。Requests能完全满足当前…

Python基础(七)--模块和包

目录 Python基础&#xff08;七&#xff09;--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 math 3.2 random 3.3 time 3.4 datetime 3.5 sys Python基础&#xff08;七&am…

LeetCode 909. 蛇梯棋(BFS)

文章目录1. 题目2. 解题1. 题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前…

爬虫必须学会的正则表达式

为什么要学正则表达式 实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在昨天的案例里实际上…

Python基础(八)--迭代,生成器,装饰器与元类

目录 Python基础&#xff08;八&#xff09;--迭代&#xff0c;生成器&#xff0c;装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2.3 生成器函数 3 装饰器 3.1 闭包 3.2 什么是装饰器 …

XPath和lxml类库

XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 什么是XML XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;XML 是一种标记语言&#xff0c;很类似 HTMLXML 的设计宗旨是传输数据&#xf…

Python基础(九)--异常

Python基础&#xff08;九&#xff09;--异常 1 异常相关概念 1.1 什么是异常 异常是程序运行过程中产生的一种事件&#xff0c;该事件会打乱程序的正常流程。可以说&#xff0c;异常就是一种意外&#xff0c;指程序没有按照正常或期望的方式执行。 当异常产生时&#xff0…

爬虫工具:虚拟机Selenium和PhantomJS,ChromeDriver 镜像安装教程

虚拟机Ubuntu 16.04中安装&#xff1a; 1.安装Selenium命令&#xff1a;pip install Selenium 2.安装PhantomJS命令&#xff1a;sudo apt install PhantomJS 3.找到Ubuntu中谷歌所对应的的版本号&#xff1a; 看到网上基本没有最新的chromedriver与chrome的对应关系表&#xff…

Python基础(十)--文件相关

目录 Python基础&#xff08;十&#xff09;--文件相关 1 读写文件 1.1 获取文件对象 1.2 文件读取 1.3 文件写入 1.4 文件定位 2 文件与路径的操作 2.1 os模块 2.2 os.path模块 2.3 shutil模块 2.4 glob模块 3 序列化 3.1 csv 3.2 json 3.3 pickle 4 上下文管理…

memcache 原理 监测 查看状态 stats 结构

Mencache内存存储方式&#xff1a;slab/LRU&#xff0c;采用预先申请固定大小的内存页&#xff08;slab/page&#xff09;&#xff0c;然后再把内存分成多个块&#xff08;chunk) 先放一张从网上找到的memcache内存结构图&#xff0c;觉得非常的赞&#xff1a; 再来一张memcach…

爬虫——多线程糗事百科案例

Queue&#xff08;队列对象&#xff09; Queue是python中的标准库&#xff0c;可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源&#xff0c;加锁是个重要的环节。因为python原生的list,dict等&#xff0c;都是not thread safe的…

LeetCode 1625. 执行操作后字典序最小的字符串(BFS)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s 以及两个整数 a 和 b 。其中&#xff0c;字符串 s 的长度为偶数&#xff0c;且仅由数字 0 到 9 组成。 你可以在 s 上按任意顺序多次执行下面两个操作之一&#xff1a; 累加&#xff1a;将 a 加到 s 中所有下标为奇数的元素…