一、字典(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. UnitTwoSummary

    目录 一.设计策略与程序分析 第一次作业 第二次作业 第三次作业 二.可扩展性检查与分析 三.bug 四.总结与反思 一.设计策略与程序分析 第一次作业 设计思路 输入,调度器,电梯分别设置成三个线程 ...

  2. 【项目】手写FTP服务器-C++实现FTP服务器

    X_FTP_server 手写FTP服务器-C++实现FTP服务器 项目Gitee链接:https://gitee.com/hsby/ftp_Server 简介 一个基于libevent的高并发FTP ...

  3. 横趟!面试中遇到的 ZooKeeper 问题

    本文作者:HelloGitHub-老荀 本文是 HelloZooKeeper 系列的最后一篇文章,接下来主要聊聊面试中如果被问到 ZooKeeper 的问题如何回答,也可以当作学完本系列的测试. 准备 ...

  4. 为什么 DNS 协议使用 UDP?只使用了 UDP 吗?

    尽人事,听天命.博主东南大学硕士在读,携程 Java 后台开发暑期实习生,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收 ...

  5. Day05_19_方法回顾

    方法回顾 * 静态方法 和 非静态方法 1.静态方法属于类所有,类实例化前即可使用: 2.非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员: 3.因为静态方法会在类加载的时候就进行初始 ...

  6. 【SpringBoot源码分析】-Bean的加载过程

    -- 以下内容均基于2.1.8.RELEASE版本 在<SpringBoot启动过程的分析>系列文章中简要的对SpringBoot整体的启动流程作了梳理,但并未针对诸多细节进行分析.前面的 ...

  7. postman传入cookie的三种方式

    1.直接在环境变量里面设置 2.在登录接口的tests,把返回值的cookie设置为全局变量 3.直接在cookie里面传入

  8. Webuploader 简单图片上传 支持多图上传

    简介: 通过webuploader 实现简单的图片上传功能,支持多张图上传 官方文档传送门:http://fex.baidu.com/webuploader/getting-started.html# ...

  9. 【golang】golang 相关问题?

    1.golang 官网下载很慢: 中科大镜像:http://mirrors.ustc.edu.cn/golang/ 2.go get 下载依赖很慢的问题: https://goproxy.io/zh/ ...

  10. 绕过网站WAF(图片绕过)

    当我们在渗透一个网站的时候,很多时候,会遇到下面这种情况.网站装有WAF,把我们的SQL注入语句给拦截了. 这就是网站的安全狗 此时,我们的渗透会陷入僵局.到底应该如何才能让我们的语句绕过安全狗的检查 ...