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 |
|
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 |
与数值类型的布尔运算规则相同(返回两个集合中的一个) |
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函数转换成字符串格式。 |
% |
转换成普通的%字符 |
转换标记如下:
标记 |
说明 |
# |
|
‘ ‘(空格) |
对正数,会留出一个空格。 |
+ |
对数值类型,会在前面添加一个+或-。如果与‘ ’(空格)同时指定,会覆盖‘ ’(空格)的设置。 |
0 |
对数值类型,如果宽度不足,左侧使用0填充。 |
- |
对结果左对齐。如果与0同时指定,会覆盖0的设置。 |
使用关键字:当提供关键字时,替换值需要提供一个字典类型。使用字典中key与关键字匹配,然后提取key对应的value进行替换。
动态模板:最小宽度与精度可以指定*值,表示使用元组中下一个值来指定宽度或精度。这有利于我们动态来指定数值,让格式化字符串(模板)更加灵活。
(2)str类的format---新式格式化
从Python2.6(Python2版本)与Python3.0(Python3版本)起,str可以使用format方法来进行格式化,相比于以前的%形式,这种方式称为新式格式化。形式为:
格式化字符串.format(替换值)
格式化字符串使用{}作为占位符,然后使用format方法的参数进行替换。占位符的格式如下:
{[字段名][!转换类型][:格式说明]}
三个部分都是可选的。
(3)格式化字符串常量
Python基础(四)--字典与集合相关推荐
- 刻意练习:Python基础 -- Task06. 字典与集合
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- Python基础三--字典,集合,编码,深浅copy,元祖、文件操作
字典 dict数据类型划分:可变数据类型,不可变数据类型不可变数据类型: 元组,bool值,int,str 可哈希可变数据类型: list,dict,set 不可哈希 dict key :必须是不可变 ...
- Python基础数据类型之set集合
Python基础数据类型之set集合 一.set数据类型介绍 二.set集合演示 三.set集合中hash介绍 1.哈希定义 2.数据类型的hash和不可hash 3.set中hash示例 四.set ...
- python基础之字典的嵌套
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...
- python基础之字典的遍历
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...
- python基础之字典的更新复制
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...
- python基础之字典的访问
博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏. ...
- Python基础(06)——集合(set、frozenset)
Python基础(06)--集合(set.frozenset) 集合是无序无索引的集合,在Python中集合用花括号表示,字典也用花括号表示. 1.set的定义 创建集合:集合种的集合项可以是不同数据 ...
- python基础03/字典
python基础03/字典 内容大纲 1.字典 1.字典 字典是无序,可变的数据类型 字典:用于存储数据,储存大量数据,字典要比列表快 1.1 定义一个列表 lst1 = ["老大" ...
- python基础四_01_面向对象
python基础四_01_面向对象编程 导读: 本文主要从what?why?how?三个方向理解面向对象编程的思想:仅供自己梳理. 一.什么是面向对象编程? 面向对象编程与面向过程编程是两种常见的编程 ...
最新文章
- STL (13) 非变动型算法
- 设计模式笔记15:代理模式(Proxy Pattern)
- CentOS中配置VNC Server
- 用GDI+转BMP为WMF、EXIF、EMF格式
- [html] 写一个三栏布局,两边固定,中间自适应
- android点击切换,android 导航栏中的按钮的点击切换
- jquery 树形框 横_利用jQuery设计横/纵向菜单
- ssh本地端口转发,远程端口转发,隧道(这个解释不饶)
- java回调函数(全干货)
- python3写网络爬虫_python3写网络爬虫
- logstash java插件_[logstash-input-log4j]插件使用详解
- InfluxDB Java入门
- 对个人来说,最好的记账方法是什么?
- 程序员必备:那些实用的Chrome扩展程序
- stm32F407中arr与psc以及pwm之间的关系
- 炎热夏季 本本散热板必不可少【lpxt】
- 将AE开发的专题图制作功能发布为WPS
- matlab怎么读取指定坐标的RGB值
- 基于物联网的室内环境检测云系统设计(树莓派RPI、Arduino、智能家居、RFID、APP)
- YOLOv7改进之二十二:涨点神器——引入递归门控卷积(gnConv)
热门文章
- tornado框架基础11-tornado异步
- AngularJS:应用
- Android “再按一次退出“
- 腾讯QQ企业邮箱POP3/SMTP设置
- asp.net中ADO.NET连接SQL数据库代码和连接Access数据库代码
- 一文让你了解RT-Thread
- 用单链表实现一个队列
- 写给准备参加秋招的学弟学妹们~一定要来看哦~
- bootloader启动流程分析
- mysql 排序num_MySQL 实现row_number() 分组排序功能