‘’’
1.Dict即字典,代表一个键/值存储库,像映射表,给定一个键,搜索该键对应的值
字典被认为是键/值对得列表
dict如何表示? 类比java中的map,key-value,键值对的形式出现
前面曾经说过的访问模型:直接存取,序列,映射。字典就是一种映射模式(mapping type)。
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
‘’’
a_dict = {}
print(a_dict)
print(type(a_dict))
a_dict = {‘name’:‘tom’, ‘age’:22} #注意看dict的结构
获取元素:
a_dict = {‘name’:‘tom’, ‘age’:22}
print(a_dict[‘name’]) #可根据key
注意:
key不能重复,不可改变
key不存在就添加元素
key存在时就修改元素
如何判断key在不在dict中?
a_dict = {‘name’:‘tom’, ‘age’:22}
print(‘age’ in a_dict) #True
print(a_dict.contains(‘name’)) #True
if ‘age’ in a_dict:
print(a_dict[‘age’]) #返回value值
get函数:
a_dict = {‘name’:‘tom’, ‘age’:22}
print(a_dict.get(‘name’)) #tom 注意:找不到返回None
操作dict中元素;
a_dict = {'name':'tom', 'age':22}
print(a_dict.pop('ame','找不到ame')) #第一个参数要删除的值,第二个为默认参数
a_dict = {'name':'tom', 'age':22,'titli':123456}
a_dict.popitem()
print(a_dict) #移除最后一个 注意:3.6之前是无序的会随机删除一个 3.6之后是有序的只会删除最后一个
当然:clear方法在这里也可以使用
a_dict = {'name':'tom', 'age':22,'titli':123456}
a_dict.clear()
print(a_dict) #{}
其他操作:
a_dict = {'name':'tom', 'age':22,'titli':123456}
b_dict = a_dict.copy()
print(b_dict) #{'name': 'tom', 'age': 22, 'titli': 123456}
print(a_dict) #{'name': 'tom', 'age': 22, 'titli': 123456}
c_dict = dict.fromkeys([1, 2, 3], 'ok') #[1, 2, 3]为key,ok为所有key的value值
print(c_dict) #{1: 'ok', 2: 'ok', 3: 'ok'}
zip函数:将对象中对应的元素打包成一个个元组
num = dict(zip([1,2,3,4],[5,6,7,8]))
print(num) #{1: 5, 2: 6, 3: 7, 4: 8}
setdefault函数:
a_dict = {'name':'tom', 'age':22,'titli':123456}
a_dict.setdefault('sex','nan') #不存在添加
a_dict.setdefault('nme') #value不添加默认为None
print(a_dict) #{'name': 'tom', 'age': 22, 'titli': 123456, 'sex': 'nan', 'nme': None}
字典的更新:
a_dict = {'name':'tom', 'age':22,'titli':123456}
b_dict = {'1':2,'2':3}
b_dict.update(a_dict) #将a_dict 元素更新到b_dict 中
print(a_dict) #{'name': 'tom', 'age': 22, 'titli': 123456}
print(b_dict) #{'1': 2, '2': 3, 'name': 'tom', 'age': 22, 'titli': 123456}
‘’’
set集合
2.什么是set?
(1)集合概念对象:我们可以感觉到的客观存在以及我们思想中的事物
或抽象符号,都可以 称作对象.
(2)集合:把一些能够确定的不同的对象看成一个整体,就说这个整体是由
这些对象的全体构成的集 合.
(3)元素:集合中每个对象叫做这个集合的元素.
'''
b_set = {}
print(type(b_set)) #<class 'dict'>
a_set = set()
print(type(a_set)) #<class 'set'>
添加元素:
a_set = set()
a_set.add(1)
print(a_set) #添加已有的会覆盖之前的,去重
update方法:
c_set = {1,2,3}
c_set.update((2,4,5))
print(c_set) #{1, 2, 3, 4, 5}
删除元素:
c_set = {1,2,3}
c_set.remove(1)
print(c_set) #{2, 3} 注意:不存在会报错
Clare方法在此也可以用,哈哈,方便不
c_set = {1,2,3}
c_set.clear()
print(c_set) #set()
set集合的简单用法;
a = [1,2,3,4,1,1,1,1,5,2,1,1]
print(set(a)) #{1, 2, 3, 4, 5} 删除重复元素
不可改变集合:
a = frozenset({1,2,3,4,1,1,1,1,5,2,1,1})
a.add(4)
print(a) #错误:AttributeError: 'frozenset' object has no attribute 'add'
判断元素是否在集合中:
a = frozenset({1,2,3,4,1,1,1,1,5,2,1,1})
print(4 in a) #True
删除集合本身:
a = frozenset({1,2,3,4,1,1,1,1,5,2,1,1})
del a
print(a) #NameError: name 'a' is not defined
复制集合:
a = frozenset({1,2,3,4,1,1,1,1,5,2,1,1})
b = a.copy()
print(a) #frozenset({1, 2, 3, 4, 5})
print(b) #frozenset({1, 2, 3, 4, 5})
set运算:
a_set = {1, 2, 3}
b_set = {4, 5, 6}
print(2 in a_set, 4 not in a_set)
print(5 in a_set, 2 not in b_set)
print(a_set == b_set, a_set != b_set)
a_set = {1, 2, 3}
b_set = {1, 2, 3, 4, 5}
print(a_set < b_set, a_set <= b_set) #根据长度比较
print(b_set >= a_set, b_set > a_set) #根据长度比较
a_set = {1, 2, 3}
b_set = {2, 3, 4}
print(a_set & b_set) # 交集 intersection 共同存在的{2, 3}
print(a_set | b_set) # 并集 union 去掉重复的{1, 2, 3, 4}
print(a_set - b_set) # 差集,仅包含在前不包含在后 difference 项在a_set中不在b_set中 结果:{1}
print(b_set - a_set) # 差集,后到前 结果:4
print(a_set ^ b_set) # 异或运算 在a_set中不在b_set中,在b_set中不在a_set中
‘’’
list,dict,set有什么特点: (概念)
字典及集合的特性:
1.查找元素速度快
2.占用内存空间的大,空间换时间:
List
3.List中元素可以重复出现
4.Set只出现key
字典的键,以及集合中的元素 都为不可变对象。
可变对象与不可变对象 int str tuple() 不可变 list set 可变对象
调用内置方法原来的对象不发生改变。
‘’’