python day2 知识点归纳
2019-03-05 本文已影响33人
Chad你要加油
dict(字典)
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
字典是另一种可变容器模型,且可存储任意类型对象

字典定义
dict = { "say": "hello", "python":3, 11:0.999, 20:["Hi", 80], (6, 2):True}
assert dict == {'say': 'hello', 'python': 3, 11: 0.999, 20: ['Hi', 80], (6, 2):True}
字典访问
通过指定key值访问对应的value:
dict = { "say": "hello", "python":3, 10:0.999, 20:["Hi", 60]}
assert dict["say"] == "hello"
assert dict[20] == ["Hi", 60]
# 不存在时 报KeyError
try:
print(dict["city"])
except KeyError:
pass
字典长度
dict = {'city': 'guangzhou', 'university': '[null](https://www.baidu.com)', 'ccege': 'gz', 'degree': 'Master'}
# 字典长度 assert len(dict) == 4
字典打印
字典打印(以字符串形式)。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 字典打印(以字符串形式)
assert str(dict) == "{'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}"
字典复制
浅复制。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 字典复制
assert dict.copy() == dict
assert id(dict.copy()) != id(dict)
字典取值
不修改 字典:
dict.get(key, default=None)
Args:
key: 字典中要查找的键。
default: 如果指定键的值不存在时,返回 该默认值 。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
#返回指定键的值
assert dict.get("city") == "guangzhou"
# 返回指定键的值,如果值在字典中,default值无效
assert dict.get("city", "Shanghai") == "guangzhou"
# 返回指定键的值,如果值不在字典中,返回default值
assert dict.get("province", "jiangshu") == "jiangshu"
修改 字典:
dict.setdefault(key, default=None)
Args:
key: 字典中要查找的键。
default: 如果指定键的值不存在时,返回 该默认值值,并 修改 字典,添加上该 key-value对 。
dict = {'city': 'guangzhou', 'university': 'null'} # guangzhou
####和get()类似
print(dict.setdefault('city'))
# 但如果键不存在于字典中,将会返回default值。 并且修改字典,添加键并将值设为default
print(dict.setdefault('ccege', 'gz')) # gz
print(dict.setdefault('location')) # None
print(dict) # {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'location': None}
key 存在
if i in dict
dict = {'city': 'guangzhou', 'university': 'null'}
# 检测键 city 是否存在
if 'city' in dict:
print("键 city 存在")
else :
print("键 city 不存在")
可遍历的 key-value 数组
dict.items()
以列表 返回 可遍历的 ## (key-value)元组数组 。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
print(type(dict.items())) # <class 'dict_items'>
print(dict.items()) # dict_items([('city', 'guangzhou'), ('university:', 'null'), ('ccege', 'gz'), ('degree', 'Master')])
for i, j in dict.items():
print(i, ":\t", j)
# city : guangzhou
# university : null
# ccege : gz
# degree : Master
key列表
dict.keys()
以 dict列表 返回字典中的所有key。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 以列表返回一个字典所有的key
print(dict.keys()) # dict_keys(['city', 'university', 'ccege', 'degree'])
for i in dict.keys():
print(i)
# city
# university
# ccege
# degree
# 也可转化为list进行操作
list_ = list(dict.keys())
list_.sort()
for i in list_:
print(i)
# city
# ccege
# degree
# university
value列表
dict.values()
以 dict列表 返回字典中的所有value。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 以列表返回一个字典所有的value
print(dict.values()) # dict_values(['guangzhou', 'null', 'gz', 'Master'])
for i in dict.values():
print(i)
# guangzhou
# null
# gz
# Master
# 也可转化为list进行操作
list_ = list(dict.values())
list_.sort()
for i in list_:
print(i)
# null
# gz
# Master
# guangzhou
字典合并
通过 update 合并字典。
dict = {"city":"guangzhou", "university":"null"}
dict_2 = {"ccege":"gz", "degree":"Master"}
dict.update(dict_2)
assert dict == {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
字典删除
通过 .pop() :
dict.pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
dict = {'city': 'guangzhou', 'university': 'null'}
# 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
print(dict.pop('city')) # guangzhou
print(dict) # {'university': 'null'}
print(dict.pop('city', 'ccege')) # ccege
通过 del :
dict_1 = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 删除key-value: 'city': 'guangzhou'
del dict_1['city']
assert dict_1 == {'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 删除字典
del dict_1
try:
print(dict_1)
except NameError:
pass
通过 .popitem() :
dict.popitem()
随机返回并删除字典中的一对键和值(一般删除末尾对)。
dict = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 随机返回并删除字典中的一对键和值(一般删除末尾对)。
print(dict.popitem()) # ('degree', 'Master')
print(dict) # {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz'}
字典清空
通过 .clear() :
dict_1 = {'city': 'guangzhou', 'university': 'null', 'ccege': 'gz', 'degree': 'Master'}
# 清空字典
dict_1.clear()
assert dict_1 == {}
set(集合)
set是一组无序排列的可哈希的值,因此可以用作字典中的键。
set具有以下特性:
- 元素不重复出现
- 元素必须是不可变对象
我们也可以把可以把set当作是dict中的键来理解,当然仅仅限于数据结构层面。
set基本操作
创建
#调用set方法创建
s = set() #创建空set
a = set('bread') #以字符串创建set
b = set(['r', 'd', 'a', 'b', 'e']) #以list创建set
c = set({'k1':'value1', 'k2':'value2', 'k3': 'value3'}) #以dict创建set
#使用"="创建
d = {'k1', 'k2', 'k3'}
e = {('k1', 'k2', 'k3')} #使用tuple创建
print(a,type(a))
print(b,type(b))
print(c,type(c))
print(d,type(d))
print(e,type(e))
执行结果为:

集合数学运算并、交、差、对称差操作符
a = l | s # l 和 s的并集
b = l & s # l 和 s的交集
c = l – s # 求差集
d = l ^ s # 对称差集
基本操作
集合本身的增、删
>>>s = set([1, 2, 3, 4])
>>>s
{1, 2, 3, 4}
>>> s.add(5) #增加元素
>>> s
{1, 2, 3, 4, 5}
>>> s.remove(5) #删除元素5
>>> s.discard(4) #删除元素4
>>> s.pop() #移除某个元素(在有序数据集pop方法移除末尾元素,无序数据集则不确定)
>>> 1
{2, 3}
>>> s.update([1, 4, 5]) #添加多个元素
>>> s
{1, 2, 3, 4, 5}
>>> s.clear() #清空所有元素
>>> s
set() #即空集
集合数学运算之并、交 、差方法
a = {11, 22, 33}
b = {22, 33, 44}
#并集
t = a.union(b) #取并集
print(t) #{33, 22, 11, 44}
#交集
t1 = a.intersection(b) #取交集
t2 = a.intersection_update #取交集并用交集更新a本身
#差集
box1 = a.difference(b)
#相当于数学上的集合a - b 即取差集
print(box1) #{11}
print(a) #{33, 11, 22}
box2 = a.difference_update(b)
#取差集 并用这些元素覆盖a本身
print(box2) #None
print(a) #{11}
判断
a = {22,33, 44}
b = {33, 44}
print(a.isdisjoint(b)) #判断是否不存在交集 False
#请注意, 没有isjoint(判断是否存在交集这种方法)
print(a.issubset(b)) #判断a是否是b的子集合 False
print(a.issuperset(b)) #判断a是否是b的父集合 True
