一、字典(dictionary)
作用:存多个值,key-value存取,取值速度快
定义:key必须是不可变类型,value可以是任意类型
字典是一个无序的,可以修改的,元素呈键值对的形式,以逗号分割的,以大括号包围的序列;
典是python基础数据类型当中唯一一个映射关系的数据类型;
说明:
字典和列表一样,也能够存储多个数据,字典中的值并没有特殊顺序。
列表中找某个元素时,是根据下标进行的,如果下标很多,查找数据不方便。
当索引不好用时,使用字典,字典中找某个元素时字典的每个元素由2部分组成,键:值。例如 \'name\':\'班长\' ,\'name\'为键,\'班长\'为值,字典由键值组成。
字典的特点:
因为字典是无序的,所以字典没有索引值;
因为字典没有索引值,所以字典以键取值,(字典的键相当于列表的索引);
因为字典以键取值,所以字典的键唯一且不可修改;所以字典天生去重;
因为字典的键不可修改,所以列表和字典等可变类型的数据不可以给字典做键。
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,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}