一、字典(dictionary)

  作用:存多个值,key-value存取,取值速度快

  定义:key必须是不可变类型,value可以是任意类型

  字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分割的,以大括号包围的序列;

  典是python基础数据类型当中唯一一个映射关系的数据类型;

说明:

  字典和列表一样,也能够存储多个数据,字典中的值并没有特殊顺序。

  列表中找某个元素时,是根据下标进行的,如果下标很多,查找数据不方便。

  当索引不好用时,使用字典,字典中找某个元素时字典的每个元素由2部分组成,键:值。例如 'name':'班长' ,'name'为键,'班长'为值,字典由键值组成。

字典的特点:

  因为字典是无序的,所以字典没有索引值;

  因为字典没有索引值,所以字典以键取值,(字典的键相当于列表的索引);

  因为字典以键取值,所以字典的键唯一且不可修改;所以字典天生去重;

  因为字典的键不可修改,所以列表和字典等可变类型的数据不可以给字典做键。

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

字典的取值

keys

返回一个包含字典所有key的列表

values

返回一个包含字典所有vaule的列表

get

以键取值,如果指定键不存在,默认返回None,可以指定返回内容

update

以字典格式更新指定键的内容,如果键不存在,创建键和值

items

返回字典键值呈元组形式的格式

len

测量字典,键值对的个数(整体)

字典的删除

pop

弹出,返回并删除指定键对应的值

popitem

随机弹出一个键值元组,这里随机的原因是因为字典无序

clear

清空字典

字典的判断

in

判断指定的键是否在字典当中,即将被废除,之后我们python3用in

字典的遍历

通过for ...in ...

通过for ... in ...:的语法结构,我们可以遍历字符串、列表、元组、字典等数据结构。

1、定义

nfo = {"name":"ryz","age":18,"qq":1249773850}
print(type(info))
---------------------------------------------------------------
<class 'dict'>

2、增加

info = {"name":"ryz","age":18,"qq":1249773850}
info["doing"] = "python"
print(info)
--------------------------------------------------------------
{'name': 'ryz', 'age': 18, 'qq': 1249773850, 'doing': 'python'}

3、修改

info = {"name":"ryz","age":18,"qq":1249773850}
info["age"] = 3
print(info)
-------------------------------------------------------------
{'name': 'ryz', 'age': 3, 'qq': 1249773850}

4、删除

info = {"name":"ryz","age":18,"qq":1249773850,"from":"shanxi","gradute":"zhongbei"}
info.pop("qq")  #标准删除
print(info)
del info["gradute"]  #注意是[]
print(info)
info.popitem()  #随机删除
print(info)
-------------------------------------------------------------------
{'name': 'ryz', 'age': 18, 'from': 'shanxi', 'gradute': 'zhongbei'}
{'name': 'ryz', 'age': 18, 'from': 'shanxi'}
{'name': 'ryz', 'age': 18}
#setdefault设置默认值
info = {
'name':'ryz',
'age':18,
'qq':1249773850
}
info.pop('name')
info.setdefault('name','ryz')  #不存在默认插入
print(info)
-----------------------------------------------------
{'age': 18, 'qq': 1249773850, 'name': 'ryz'}  

5、查找

info = {"name":"ryz","age":18,"qq":1249773850,"from":"shanxi","gradute":"zhongbei"}
print("age" in info)  #检查字典是否存在该key,存在返回True,不存在返回False
print(info.get("qq"))  #获取qq对应的value值
print(info["age"])  #获取qq对应的value值
# print(info["love"])  #如果一个键不存在,就报错,get不会报错,不存在只返回None
print(info.get("love"))
-------------------------------------------------------------
True
1249773850
18
None

6、多级字典嵌套及操作

dict1 = {
"北京":{
"朝阳区":["望京","国贸"],
"海淀区":["央视塔"],
"昌平区":["宏福"],
},
"山西":{
"太原":["尖草坪","小店"],
"晋中":["乔家大院","平遥古城"],
},
"河北":{
"保定":[]
},
}
print(dict1["北京"]["朝阳区"])
dict1["河北"]["保定"] = "狼牙山"
print(dict1["河北"]["保定"])
dict1["山西"]["太原"][0] += ",中北大学"
print(dict1["山西"]["太原"])
-------------------------------------------------------------
['望京', '国贸']
狼牙山
['尖草坪,中北大学', '小店']

7、其它

info = {"name":"ryz","age":18,"qq":1249773850,"from":"shanxi","gradute":"zhongbei"}
print(info.keys())  #得到字典的键
print(info.values())  #得到字典的值
print(info.get("name"))  #以键取值,如果知道键不存在,默认返回None,可以指定返回内容
# print(info.clear())  #清空字典
print(len(info))  #测量字典长度
--------------------------------------------------------------
dict_keys(['name', 'age', 'qq', 'from', 'gradute'])
dict_values(['ryz', 18, 1249773850, 'shanxi', 'zhongbei'])
ryz
5
info = {"name":"ryz","age":18}
info2 = {"qq":1249773850}
info.update(info2)  #字典updata()函数把字典info2的键值对更新到dict里
print(info)
------------------------------------------
{'name': 'ryz', 'age': 18, 'qq': 1249773850}
info = {"name":"ryz","age":18,}
print(info.items())  #以元组形式返回dict键值对
-------------------------------------------------
dict_items([('name', 'ryz'), ('age', 18)])
print(dict.fromkeys([1,2,3]),"hello")
print(dict.fromkeys([1,2,3],"hello"))  #通过一个列表生成默认dict,尽量少用
-----------------------------------------------------
{1: None, 2: None, 3: None} hello
{1: 'hello', 2: 'hello', 3: 'hello'}

8、循环dict

info = {"name":"ryz","age":18,"qq":1249773850,"from":"shanxi","gradute":"zhongbei"}
for i in info.items():
print(i)
for k,v in info.items():  #会先把dict转成list,数据量大时莫用
print(k,v)
-------------------------------------------------
('name', 'ryz')
('age', 18)
('qq', 1249773850)
('from', 'shanxi')
('gradute', 'zhongbei')
name ryz
age 18
qq 1249773850
from shanxi
gradute zhongbei

二、集合(set)

 定义集合:{  }内用逗号分割每个元素都必须是不可变类型,元素不能重复,无序

集合对象还支持交集(intersection),差集(difference)、并集和对称差集(sysmmetric_difference)

  集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系
#作用:关系运算,去重
python = {"test","gavin","woniu"}
linux = {"boy","girl","test"}
# &交集:同时报名两门课程的学生
print(python&linux)
# |并集: 所有的学生
print(python|linux)
#^ 对称差集:没有同时报名两门课程
print(python^linux)
# - 差集:只报名python课程的学生,去掉共同的部分
print(python-linux)
---------------------------------------------------------------
{'test'}
{'girl', 'woniu', 'test', 'boy', 'gavin'}
{'girl', 'gavin', 'boy', 'woniu'}
{'gavin', 'woniu'}
# s = set([3,5,9,10])      #创建一个数值集合
s = {3,5,9,10}
print(type(s))
t = set("Hello") #创建一个唯一字符的集合
print(type(t))
print(s|t) # t 和 s的并集
print(s&t) # t 和 s的交集
print(s-t) # 求差集(项在t中,但不在s中)
print(s^t) # 对称差集(项在t或s中,但不会同时出现在二者中)
print(s.union(t)) #s | t
#返回一个新的 set 包含 s 和 t 中的每一个元素
print(s.intersection(t)) #s & t
#返回一个新的 set 包含 s 和 t 中的公共元素
print(s.difference(t)) #s - t
#返回一个新的 set 包含 s 中有但是 t 中没有的元素
print(s.symmetric_difference(t)) #s ^ t
#返回一个新的 set 包含 s 和 t 中不重复的元素 #基本操作:
t.add('x') # 添加一项
print(t)
s.update([10,37,42]) # 在s中添加多项
print(s)
#使用remove()可以删除一项:
t.remove('H')
print(t)
print(len(s)) #set 的长度
print('x' in s)
# #测试 x 是否是 s 的成员
print('x' not in s)
#测试 x 是否不是 s 的成员
print(s.issubset(t)) #s <= t
#测试是否 s 中的每一个元素都在 t 中
print(s.issuperset(t)) #s >= t
#测试是否 t 中的每一个元素都在 s 中
print(s.copy())
#返回 set “s”的一个浅复制
----------------------------------------------------------------
1、<class 'set'>
2、<class 'set'>
3、{'o', 3, 5, 9, 10, 'H', 'l', 'e'}
4、set()
5、{9, 10, 3, 5}
6、{'o', 3, 5, 9, 10, 'H', 'l', 'e'}
7、{'o', 3, 5, 9, 10, 'H', 'l', 'e'}
8、set()
9、{9, 10, 3, 5}
10、{'o', 3, 5, 9, 10, 'H', 'l', 'e'}
11、{'o', 'x', 'H', 'l', 'e'}
12、{3, 37, 5, 9, 10, 42}
13、{'o', 'x', 'l', 'e'}
14、6
15、False
16、True
17、False
18、False
19、{3, 42, 37, 5, 9, 10}

python基础之字典、集合的更多相关文章

  1. Python 全栈开发二 python基础 字符串 字典 集合

    一.字符串 1,在python中,字符串是最为常见的数据类型,一般情况下用引号来创建字符串. >>ch = "wallace" >>ch1 = 'walla ...

  2. python基础之字典dict和集合set

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7043642.html python基础之字典dict和集合set 字典dic ...

  3. 『Python基础-11』集合 (set)

    # 『Python基础-11』集合 (set) 目录: 集合的基本知识 集合的创建 访问集合里的值 向集合set增加元素 移除集合中的元素 集合set的运算 1. 集合的基本知识 集合(set)是一个 ...

  4. Python基础数据类型之集合

    Python基础数据类型之集合 集合(set)是Python基本数据类型之一,它具有天生的去重能力,即集合中的元素不能重复.集合也是无序的,且集合中的元素必须是不可变类型. 一.如何创建一个集合 #1 ...

  5. Python基础数据类型-字典(dict)

    Python基础数据类型-字典(dict) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的每一篇都是Python3.x版本的哟 ...

  6. Python基础篇(set集合)

    Python基础篇(set集合,深浅拷贝) set集合是Python的一个基本类型,一般是不常用.set中的元素是不重复的.无序的里边 的元素必须是可hash的比如int,str,tuple,bool ...

  7. Python基础__字典、集合、运算符

    之前讨论的字符串.列表.元组都是有序对象,本节则重点讨论无序对象:字典与集合.一.字典 列表是Python中的有序集合,列表中的序指的是列表中的元素与自然数集形成了一个一一对应的关系.例如L=['I' ...

  8. Python基础知识---字典

    现在在实习期间,好久没用Python了,今天在做Java项目时用的HashMap让我联想到了Python中的字典,就写一些Python字典的知识吧,复习复习. 字典:  key --> valu ...

  9. python3笔记十八:python列表元组字典集合文件操作

    一:学习内容 列表元组字典集合文件操作 二:列表元组字典集合文件操作 代码: import pickle  #数据持久性模块 #封装的方法def OptionData(data,path):    # ...

随机推荐

  1. 京东效率专家带你快速落地DevOps

    行业内的公司纷纷在招聘DevOps工程师,企业的DevOps转型看起来迫在眉睫,公司内部也要设计和开发DevOps平台,DevOps已经成为了所有IT从业人员应知应会的必备技能. 为你提供一套清晰的D ...

  2. C语言-字符串函数的实现(一)之strlen

    C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...

  3. 采用QT技术,开发OFD电子文档阅读器

    前言 ofd作为板式文档规范,相当于国产化的pdf.由于pdf标准制定的较早,相关生态也比较完备,市面上的pdf阅读器种类繁多.国内ofd阅读器寥寥无几,作者此前采用wpf开发了一款阅读器,但该阅读器 ...

  4. Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(五):鉴权 gRPC-Interceptor 拦截器实战

    拦截器(gRPC-Interceptor)类似于 Gin 中间件(Middleware),让你在真正调用 RPC 服务前,进行身份认证.参数校验.限流等通用操作. 系列 云原生 API 网关,gRPC ...

  5. 从应用层到网络层排查 Dubbo 接口超时全记录

    大家好,我是坤哥 我们常说面试造火箭,很多人对此提出质疑,相信大家看了这篇文章会明白面试造火箭的道理,这篇排查问题的技巧涉及到索引,GC,容器,网络抓包,全链路追踪等基本技能,没有这些造火箭的本事,排 ...

  6. 敏捷史话(十五):我发明了敏捷估算扑克牌 —— James Greening

    雪鸟会议 雪鸟会议前夕,James Grenning 在 Object Mentor 与 Robert C. Martin 一同工作,彼时组织雪鸟会议的 Bob 大叔盛情邀请 James,告知他会议的 ...

  7. 面试系列<5>——面向对象

    面试系列--面向对象思想 一.三大特性 封装 利用抽象数据类型将数据和基于数据的操作封装在一起,使其成为一个不可分割的独立实体.数据被保护在抽象数据类型内部,尽可能地隐藏内部细节,只保留一些对外的接口 ...

  8. python3存储numpy格式的矩阵

    技术背景 numpy在python中的地位是相当高的,即使是入门的python使用者也会经常看到这个库的使用.除了替代python自带的列表数据格式list之外,numpy的一大优势是其底层的高性能实 ...

  9. 1-2 postman工具简介

    postman提供了一个多窗口和多选项卡页面用于发送和接受请求,postman努力保持整洁和灵活,提供更多的空间,满足用户的需要.他很简单,能满足大部分接口的测试,性价比特别高.如图所示:  1.侧边 ...

  10. 【缓存池】转-Mysql参数innodb_buffer_pool_size

    转自:https://blog.csdn.net/kk185800961/article/details/79378313/ 以下考虑主要为 Innodb 引擎 [ innodb_buffer_poo ...