2018-08-28 day7 dict和set
2018-08-28 本文已影响0人
rzlong
字典
声明字典
- 字典是容器类型,也是序列。以键值对作为元素(key-value)。
- 键值对:
key:value
,键必须唯一且不可改变(数值、布尔、字符串和元组);通常使用字符串;若定义了相同的key时,它会按照后一个出现的值为准;值可以不唯一,可以是任何类型的数据 - 使用
{ }
表示 - 字典是可变的(元素可变)
dict1 = {'hero':'lucian', 2:'oneplus', True:'True',(10,20):'坐标(10,20)'}
print(dict1)
result:
{'hero': 'lucian', 2: 'oneplus', True: 'True', (10, 20): '坐标(10,20)'}
获取字典的元素对应的值
- 字典存数据,实质存的value,key是获取value的手段
-
dict_name[key]
-- 通过key获取值,若key不存在时返回KeyError
print(dict_list['name'],dict_list['medicine'])
result:
shiting wang yuting
-
dict_name.get(key)
-- 通过key获取值,若key不存在返回None,代表没有
print(dict_list.get('a'))
result:
None
注:key肯定存在时用[],可能不存在或不希望返回错误时用get
字典遍历
- 遍历字典直接取到字典的key值
for k in person:
print(k,person[k])
for k,v in person.items():
print(k,v)
result:
name 某宝
age 10
boss 某云
sex 男
name 某宝
age 10
boss 某云
sex 男
修改元素
- 语法
dict_name[key] = value
person['sex'] = '女'
print(person)
增加元素
dict_name[new_key] = value
del person['age']
删除元素
del dict_name[key]
a = person.pop('boss') #a保存的是删除key对应的value
字典相关计算
- 字典不支持 + 和 *
- in 和 not in -- 判断key在字典中是否存在
-
len(dict_name)
获取字典中元素的数量 -
dict_name.clear()
删除字典中所有的元素 -
dict_name.copy()
复制字典中的键值对到新的字典,属于浅拷贝
computer1 = computers #复制computers的地址给computer1
computer2 = computers.copy() #复制computers的全部元素到一个新的内存空间中,并且将新的地址给computer2
-
copy.deepcopy(dict_name)
需先导入copy
模块,属于深拷贝 -
dict.fromkeys(seq, Default = None)
将列表转换字典,将序列seq中每个值作为key,默认值为value创建一个新的字典.默认值不写时为None
print(dict.fromkeys(computers,12))
- 获取字典项
# dict_name.keys() 获取字典中的所有key,返回dict_keys类型
print(type(computers.keys()),computers.keys())
# dict_name.values() 获取字典中所有key对应的value,返回dict_values类型
print(type(computers.values()),computers.values())
# dict_name.items() 获取字典所有的元,返回dict_items类型。
print(type(computers.items()),computers.items())
# 不推荐使用,遍历数据时会转换数据,占用更大的资源。
result:
<class 'dict_keys'> dict_keys(['brand', 'color'])
<class 'dict_values'> dict_values(['联想', 'white'])
<class 'dict_items'> dict_items([('brand', '联想'), ('color', 'white')])
-
dict_name.setdefault(key, Default=None)
给字典添加键值对,如果键值对存在,就不作处理
computers.setdefault('value','nice')
-
dict1.update(dict2)
将字典2的键值对更新到字典1中,如果字典2的键值对在字典1中存在,就更新对应键的值
dict1 = {'age':10,'name':'007'}
dict2 = {'num':10,'name':'king'}
print('before updating: ',dict1)
dict1.update(dict2)
result:
{'brand': '联想', 'color': 'white', 'value': 'nice'}
before updating: {'age': 10, 'name': '007'}
updated: {'age': 10, 'name': 'king', 'num': 10}
list和dict的组合
- 数据保存多个数据的类型是同一种类型,使用列表
保存多个学生的信息 students_info = [{}, {}, {}...] - 数据保存多个数据的类型不同,使用字典
如保存
student_info = [
{'name':'lucian','age':10},
{'name':'lax','age':12},
{'name':'gaylun','age':14}
]
py_class = {
'class_name':'python1806',
'students':student_info,
'location':'2_classroom'
}
- 输入一名学生的姓名,根据姓名删除对应的学生
name = input('输入姓名:')
for item in py_class['students'][:]:
if item['name'] == name:
py_class['students'].remove(item)
print('已删除' )
print(py_class)
集合set
集合在python中是一种无序的可变且值唯一的容器类型
- 声明集合
set1 = {1,3,'a',(1,2),True}
print(set1,type(set1))
set2 = set('dongdongqiang')
print(set2)
# 将其他的序列转换成集合,自带一个去重的功能
#定义空集合必须 set1 = set()
result:
{(1, 2), 1, 3, 'a'} <class 'set'>
{'g', 'q', 'n', 'o', 'i', 'd', 'a'}
- 集合不能单独获取其中的某一个元素的,只能通过遍历获取集合的元素
for item in set1:
print(item)
result:
(1, 2)
1
3
a
-
添加元素
set_name.add(obj)
set1.remove('old') print(set1) result: {(1, 2), 1, 3, 'goods', 'a'}
set1.update(set2)
set1.update({'new','old'}) print(set1) result: {(1, 2), 1, 'new', 3, 'goods', 'old', 'a'}
-
删除元素
- set_name.remove(obj) 删除集合中指定的元素
set1.remove('old') print(set1) result: {(1, 2), 1, 'new', 3, 'goods', 'a'}
- set_name.clear() 删除整个集合的元素
- del set_name 删除集合
-
集合中不能修改元素
-
数学相关运算
# a.判断包含情况
'''
集合1 >= 集合2 判断集合2是集合1的子集
集合1 <= 集合2 判断集合1是集合2的子集
'''
# b.求交并补
'''
并集:集合1 | 集合2 求两个集合的全部部分
交集:集合1 & 交集2 求两个集合公共部分
补集:集合1 ^ 集合2 求两个集合除公共部分以外的部分
'''
# c.差集
'''
集合1 - 集合2 集合1对于集合2没有的部分
'''