python基本数据类型 - 字典集合

 引入

在内存中存储的数据可以是不同的数据类型。比如名字可以使用字符串存储,年龄可以使用数字存储,python有6种基本数据类型,用于各种数据的存储,分别是:numbers(数字类型)、string(字符串)、List(列表)、Tuple(元组)、Dictionary(字典).

本文介绍字典和集合。

字典类型(Dict)

定义

字典是可变类型的容器数据类型,可以存储任意数据类型的对象。{}内用逗号分隔开多个key:value,其中value可以是任意类型的值,key必须是不可变类型(字符串、数字、元组),一般是对value具有描述性质的字符串,键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。

# 创建字典的两种方式
dic = {'x': 'x', 'y': 'y'}  # 方式一
dic = dict(x='x', 'y'=y)  # 方式二

操作字典的方法

按照key存/取值

d={'k1':111}#针对赋值操作:key存在,则修改
d['k1']=222#针对赋值操作:key不存在,则创建新值
d['k2']=3333
print(d)  # {'k1': 222, 'k2': 333}

len()

字典的键值对个数,当有key重复的时候,只记一次。

d={'k1':111,'k2':2222,'k1':3333,'k1':4444}
print(d)  # {'k1': 4444, 'k2': 2222}
print(len(d))  # 2

成员运算

判断key是否包含在字典中

d={'k1':111,'k2':2222}
print('k1' in d)  # True
print(111 in d)   # False

删除操作

del

通用删除,没有返回值

d={'k1':111,'k2':2222}
del d['k1']
print(d)  # {'k2': 2222}

pop()

根据key删除元素,会返回被删除的key对应的value

d={'k1':111,'k2':2222}
res=d.pop('k2')
print(d)  # {'k1': 111}
print(res)  # 2222

popitem()

popitem随机删除一组键值对,将被删除的键值对以元组的方式返回

d={'k1':111,'k2':2222}  
res=d.popitem()
print(d)  # {'k1': 111}
print(res)  # ('k2', 2222)

keys() values() items()

在Python2中得到的分别是字典的所有key的列表、所有value的列表、所有键值对元组的列表,缺点是如果数据量非常大会很占用内存空间。

>>> d={'k1':111,'k2':2222}
>>> d.keys()
['k2', 'k1']>>> d.values()
[2222, 111]>>> d.items()
[('k2', 2222), ('k1', 111)]

在python3中得到的是会'下'出每个值的老母鸡,不会占用内存空间。

>>> d = {'name':'python','age':12}
>>> d.keys()
dict_keys(['name', 'age'])
>>> d.values()
dict_values(['python', 12])
>>> d.items()
dict_items([('name', 'python'), ('age', 12)])

循环遍历

遍历字典中的key

for k in d.keys():print(k)for k in d:print(k)

遍历字典的value

for value in d.values():print(value)

遍历字典中的键值对

for key, value in d.items():print(key, value)

其他内置方法

clear()

清空字典

d = {'name':'python','age':12}
d.clear()
pritn(d)  # {}

update()

用其他字典更新当前字典,存在的键值对进行覆盖,不存在的进行添加

d = {'name':'python','age':12}
d.update({'sex': ',male', 'name': 'tony'})
print(d)  # {'name': 'tony', 'age': 12, 'sex': ',male'}

get()

根据key取值,容错性高,弥补了使用[]取值时key不存在报错的问题

d = {'a':'gg','k':21}
# 弥补当key不存在时会报错的问题,不会报错,会返回None
print(d['k3'])  # 会报错
d.get('k3')    # 会返回none,容错性好

集合(Set)

定义

在{}内用 , 分隔开多个元素,

s = {}  # 空的花括号默认定义的是空字典
print(type(s))  # <class 'dict'>s = set()  # 通过这种方式得到的才是空集合

集合内的元素必须满足以下三个条件:

1.集合内的元素必须为不可变类型

s2 = {[1,2,3],1}  
print(s2)
# 会报错
TypeError: unhashable type: 'list'  # 不可哈希是可变类型

2.集合内元素无序

s = {1,2,'a',(1,4)}  # 底层是调用了set()功能
print(s)

3.集合内元素没有重复,可以进行去重操作

s = {1,1,1,1,1,2,2}
print(s)  # {1, 2}

类型转换

相当于底层调用for循环,取出每一个值放在集合中

# 对字符串进行转换,会自动将字符串中重复的去掉
s = set('hellollllop'))# 对列表进行转换
s = set([1,2,3,4,5,6])
# s = set([1,2,3,4,5,6,[1,2]])  会报错
# print(s)# 对字典进行转换
s = set({'k1':12,'k2':13}.items())
s = set({'k1':12,'k2':13})
s = set({'k1':12,'k2':13}.values())

操作集合的方法

关系运算

两个集合可以进行数学中的交集、并集等运算。

a = {1, 2, 3}
b = {2, 3, 4}

交集

求两个集合共同的值,两种方法

res = a & b  # {2, 3}
res1 = a.intersection(b)  # {2, 3}

并集

两个集合所有的值,重复的去掉, 两种方式

res = a | b  # {1, 2, 3, 4}
res1 = a.union(b)  # {1, 2, 3, 4}

差集

比如,取a集合独有的值,a为被减,两种方式

res = a - b  # {1}
res1 = a.difference(b)  # {1}

对称差集

两个集合分别独有的值组成一个新的集合,两种方式

res = a ^ b  # {1, 4}
res1.symmetric_difference(b)  # {1, 4}

父子集

判断一个集合是否是另一个集合的父集/子集,如果两个集合相等,互为父子集

s4 = {1,2,3}
s5 = {1,2}res = s4.issubset(s5)  # False 判断s4是否是s5的子集
res1 = s4.issuperset(s5)  # True 判断s4是否是s5的父集

去重操作

集合的去重操作有局限性,只能对不可变类型的数据进行去重,并且无法保证原来的顺序。针对可变类型数据的去重操作,需要自己编写代码完成功能。

# 去掉列表中重复的字典
l=[{'name':'lili','age':18,'sex':'male'},{'name':'jack','age':73,'sex':'male'},{'name':'tom','age':20,'sex':'female'},{'name':'lili','age':18,'sex':'male'},{'name':'lili','age':18,'sex':'male'},
]
new_l = []
for info in l:if info not in new_l:new_l.append(info)l = new_l
l = new_l

len()

集合中元素的数量

a = {1, 2, 3, 4}
print(len(a))  # 4

成员运算

判断某个元素是否包含在集合中,结果是True或者False

print(1 in a)  # True
print(5 not in a)  # True

循环遍历

for i in a:print(a)

其他内置方法

discard() remove() pop()

# discard()删除指定元素,元素不存在不会报错,do nothing
a = {1, 2, 3, 4}
a.discard(5)
print(a)  # {1, 2, 3, 4}
a.discard(4)
print(a)  # {1, 2, 3}# remove()删除指定元素,元素不存在报错
a.remove(4)  # KeyError: 4# pop()随机删除,返回被删除的元素
res = a.pop()
print(res)  # 1

update()

使用另一个集合对当前集合进行更新,自动进行去重

a = {1, 2, 3, 4}
a.update({1, 2, 3, 4, 5})
print(a)  # {1, 2, 3, 4, 5}

add()

为集合增加新的值

a.add(8)

isdisjoint()

判断两个集合是否完全独立,没有相同的部分

print(a.isdisjoint({1,2,3}))  # False

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

【笔记】Blender4.0建模入门-3物体的基本操作

Blender入门 ——邵发 3.1 物体的移动 演示&#xff1a; 1、选中一个物体 2、选中移动工具 3、移动 - 沿坐标轴移动 - 在坐标平面内移动 - 自由移动&#xff08;不好控制&#xff09; 选中物体&#xff1a;右上的大纲窗口&#xff0c;点击物体名称&#xff0c;物体的轮…

文件操作(上)

目录 文件的必要性&#xff1a; 文件分类&#xff1a; 程序文件&#xff1a; 数据文件&#xff1a; 文件的打开与关闭&#xff1a; fopen函数分析: ​编辑 FILE*: char*filename: char*mode: fclose函数&#xff1a; 应用&#xff1a; 文件编译 Fgetc Fputc 应用…

HNU-数据挖掘-作业1

数据挖掘课程作业作业1 计科210X 甘晴void 202108010XXX 第一题 假设所分析的数据包括属性 age,它在数据元组中的值&#xff08;以递增序&#xff09;为13 ,15 ,16 ,16 ,19 ,20 ,20 ,21 ,22 ,22 ,25 ,25 ,25 ,25 ,30 ,33 ,33 ,35 ,35 ,35 ,35 ,36 ,40 ,45 ,46 ,52,70。 a.…

基于Unity平台开发Vision Pro应用

VisionOS是苹果最新空间计算设备Vision Pro的操作系统。Unity开发人员可以利用现有的3D场景 以及为 visionOS 构建游戏或应用程序的资产。有关 visionOS 的更多信息&#xff0c;请参阅 Apple 的 visionOS 概述。 visionOS提供了几种不同的显示应用程序的模式&#xff1a;Windo…

【网站项目】基于SSM的274办公自动化管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

JVM系列-1.初识JVM

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

异或运算的骚操作,由浅入深拿捏一类型的题

文章目录 &#x1f680;前言&#x1f680;异或运算的基本用法&#x1f680;一组数中一种数出现了奇数次&#xff0c;其他种数出现了偶数次&#xff0c;找出这个数&#x1f680;一组数中有两种数出现了奇数次&#xff0c;其他种数出现了偶数次&#xff0c;求这两个数✈️得到一个…

Spring Boot3.2.2整合MyBatis Plus3.5.5

目录 1.前置条件 2.导坐标 3.配置数据源 4.配置mapper扫描路径 5.MyBatis Plus代码生成器整合 1.导坐标 2.编写代码生成逻辑 1.前置条件 已经初始化好一个spring boot项目且版本为3X&#xff0c;项目可正常启动 2.导坐标 <dependency><groupId>com.baomid…

弹性调度助力企业灵活应对业务变化,高效管理云上资源

作者&#xff1a;吴昆 什么是弹性调度 云计算时代&#xff0c;企业可以通过云平台获得大量计算资源&#xff0c;并根据业务发展和流量需求的实时变化&#xff0c;灵活调整使用的资源类型与资源量。阿里云提供了多种弹性资源&#xff0c;如云服务器 ECS 和弹性容器实例 ECI&am…

基于 Spring Boot+MySQL实现的在线考试系统源码+数据库,基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统

1. 部署相关 1.1. 介绍 一个 JAVA 实现的在线考试系统,主要实现一套基于不同类型的客观题,进行自动组卷、批卷等功能的考试系统&#xff08;没有主观题&#xff09; 1.2. 系统架构 后端技术栈基于 Spring Boot数据库MySQLORMMyBatis & MyBatis-plus缓存Redis、guava的L…

【Java网络编程02】套接字编程

【Java网络编程02】套接字编程 1. Socket套接字 概念&#xff1a;Socket套接字&#xff0c;就是系统提供用于实现网络通信的技术&#xff0c;是基于TCP/IP协议的网络通信基本操作单元。基于Socket套接字的网络程序开发就是网络编程。 分类&#xff1a; 我们可以把Socket套接字…

docker 部署 sentinel

docker 部署 sentinel 环境安装 拉取镜像 目前稳定的版本是1.8.0 docker pull bladex/sentinel-dashboard:1.8.0启动服务 docker run --name sentinel -p 8858:8858 -td bladex/sentinel-dashboard:1.8.0登录 登录的时候账号和密码都是sentinel

算法训练营Day45

#Java #动态规划 Feeling and experiences&#xff1a; 最长公共子序列&#xff1a;力扣题目链接 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新…

泛型..

1.泛型 所谓泛型 其实就是一种类型参数(我们平常所见到的参数指的就是方法中的参数 他接收有外界传递来的值 然后在方法中进行使用) 并且还提高了代码的复用率 何以见得提高了代码的复用率 其实就是通过对比使用了泛型技术和没有使用泛型技术之间的区别&#xff1a; 以下是没有…

windows如何切换访问NAS共享文件夹用户

从资源管理器对NAS共享文件夹输入用户名与密码进行访问后&#xff0c;想切换访问用户&#xff0c;搜索了一圈&#xff0c;网上介绍的方法都无效&#xff0c;最后只能注销windows7登陆&#xff0c;然后重新登陆&#xff0c;再访问NAS共享时才能切换用户&#xff0c;各位观众如有…

深度学习记录--Momentum gradient descent

Momentum gradient descent 正常的梯度下降无法使用更大的学习率&#xff0c;因为学习率过大可能导致偏离函数范围&#xff0c;这种上下波动导致学习率无法得到提高&#xff0c;速度因此减慢(下图蓝色曲线) 为了减小波动&#xff0c;同时加快速率&#xff0c;可以使用momentum…

【软件测试】学习笔记-制定性能测试的目标

之前有同学交流过&#xff0c;在测试执行过程中他并不清楚测试得到的结果到底能不能满足这次活动的需求。经过追问&#xff0c;发现他连本次活动规则涉及的模块和接口都不是十分清楚&#xff0c;像这样的测试就是没有做性能测试目标的分析。虽然说做了性能测试&#xff0c;但几…

学习CANopen --- [12] Abort报文

当我们使用SDO进行读写操作时&#xff0c;有时device会返回abort报文&#xff0c;意味着本次SDO读写失败。本文使用例子来讲解Abort报文&#xff0c;以及如何解读失败原因。 一 Device例子 下面是device的python代码&#xff0c;文件名叫device.py&#xff0c;device的CANopen…

Linux配置主机名-使用主机名访问服务器

主要需要对Hosts文件进行操作&#xff0c; Hosts是一个没有扩展名的系统文件&#xff0c;可以用记事本等工具打开&#xff0c;其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”&#xff0c; 先将自己的主机名设置成有意义&#xff0c;别人好记的样子&a…

上位机图像处理和嵌入式模块部署(开篇)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图像处理是现实生活当中很实用的一门技术。工业上一般采用的是机器视觉&#xff0c;以传统算法和光源控制为主&#xff0c;部分采用了深度学习技术…