一、字典(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. 3. Mybatis Insert

    案例: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC &qu ...

  2. JAVAEE_Servlet_19_重定向可以解决页面刷新问题(sendRedirect)

    重定向可以解决页面刷新问题(sendRedirect) 在向数据库中添加数据的时候,如果使用转发(getRequestDispatcher),数据插入成功后,转发到提示插入成功页面,在数据插入成功页面 ...

  3. Day05_21_Constructor构造器

    Constructor 构造器 构造方法(构造函数,构造器) 构造方法又被称为 构造函数/构造器/Constructor 构造方法的语法结构: [修饰符列表] 构造方法名 (形式参数列表){ 构造方法 ...

  4. 模拟退火算法(1)Python 实现

    1.模拟退火算法 模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能 ...

  5. 【cypress】6. cypress的默认文件结构介绍

    通过之前的一些介绍,已经大概其明白cypress是个啥,但是具体使用的细节点还有很多,需要一步步的去学习. 在安装好cypress之后,会生成一个默认项目,这个项目结构里的各个文件夹是干嘛使的呢? 一 ...

  6. SpringCloud之配置中心(config)的使用Git+数据库实现

    SpringCloud微服务实战系列教程 -------------------------目录------------------------------ 一.配置中心应用(Git) 二.配置中心的 ...

  7. yapi简介,安装及使用

    简介 ​ YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互体验, ...

  8. hdu3594 强连通 tarjan

    题意: 判断是不是强连通图 ,同时每一条边必须只能在一个环里 思路:之前我的强连通用的全是双深搜,结果题目的第二个要求很难判断,一开始写了三个深搜加上并查集,结果越写越乱,其实就是在判断一个边是否只在 ...

  9. DVWA之Brute Force

    DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法 ...

  10. Windows中的工作组和域

    目录 工作组 工作组的访问 工作组的优缺点 域 ​域结构 域的原理 部署域架构 如何加入域 域中主机的登录 SRV出错及解决办法 SRV记录注册不成功的可能原因 禁用域中的账户 将计算机退出域 工作组 ...