文章目录
3.字典
3.1特点
- 字典是列表以外python中使用最灵活的内置数据类型
- 字典是一种可变的数据类型
- 和列表的区别
- 列表有序,字典无序
- 列表通过索引访问元素,字典通过键(key)访问元素
- 字典基本格式
dic={key1:value1,key2:value2,......keyn:valuen}
- 值可以取任意数据类型,但键不可以,必须为不可变数据类型,即key必须可哈希
- 补充
- 可哈希:不可变
- 不可哈希:可变
- 特点
- key:value ,键值对之间用冒号连接
- key:value,组成字典的一个元素
- 键值对之间用逗号隔开
- 整个字典用{}包裹
3.2创建
空字典
>>> dic={}
>>> type(dic)
<class 'dict'>
多元素字典
info = {'id':31901001,'name':'Sheep','sex':'boy'}
>>> dic=dict(id=1001,name='sheep',age=16)
>>> dic
{'id': 1001, 'name': 'sheep', 'age': 16}
强转(zip的使用)
zip()
key=('id','name','age')
value=(1001,'sheep',16)
tp=dict(zip(key,value))
print(tp,type(zip),type(tp))
#{'id': 1001, 'name': 'sheep', 'age': 16}
#<class 'type'> <class 'dict'>
通过fromkeys方法创建字典
- 格式
dict.fromkeys(seq,val=None)
- 创建并返回一个字典
- 以sep中的元素作为字典的键
- val的值作为该字典所有键的初始值,不提供默认为None
dic=dict.fromkeys('Tom')
print(dic)
#{'T': None, 'o': None, 'm': None}
dic=dic.fromkeys(['name','sex','age'],33)
print(dic)
#{'name': 33, 'sex': 33, 'age': 33}
3.3常见操作
3.3.1增
- 直接添加键值对(dic[key]=value)
- 通过使用变量名[‘键’]=‘值’
- 如果key不存在,新建键值对[key:value]
- 如果存在则更新值
- 通过使用变量名[‘键’]=‘值’
dic={}
dic['id'] = 1001
dic['name'] = 'sheep'
dic['age'] = 16
print(dic)
#{'id': 1001, 'name': 'sheep', 'age': 16}
dic['name'] = 'Tom'
print(dic)
#{'id': 1001, 'name': 'Tom', 'age': 16}
- 例子:简单的添加查询
lis=[{'id':1001,'name':'Tom'},{'id':1002,'name':'Sheep'}]
def sel_name(id):
id=int(id)
for i in lis:
if i['id']==id:
return i['name']
return 1;
def add_lis(id,name):
id=int(id)
lis.append({'id':id,'name':name})
while True:
a = input('-----------\n1.添加成员\n2.通过id查找人员\n0.退出并查看\n-----------\n')
a = int(a)
if a == 1:
id = input('请输入添加id:')
while True:
if sel_name(id) == 1:
break
else:
print('id已被注册!!!')
id = input('请重新输入id:')
name = input('请输入添加姓名:')
add_lis(id, name)
print('添加成功')
elif a == 2:
id = input('请输入id:')
if sel_name(id) == 1:
print("查无可寻")
else:
print('name:', sel_name(id))
elif a == 0:
print(lis)
exit()
else:
print('输入错误!')
st=input('按任意键继续!')
-
dic.update(dic)
把字典dic中的键值对(key:value)更新到dict中
- 两个字典的键完全不同,则将dic的键值对全部添加到dict中
- 存在两个相同的键,则更新
dic={'id':1001,'name':'sheep'} dic2={'sex':'boy','name':'tom'} dic2.update(dic) print(dic2) #{'sex': 'boy', 'name': 'sheep', 'id': 1001}
3.3.2删
-
dict.pop
- 格式:dict.pop(key[,default])
- 如果key存在于dict中,删除并返回dict[key]
- 如果不存在,给出返回默认值,未给出默认值,报错
dic2={'sex': 'boy', 'name': 'sheep', 'id': 1001} dic2.pop('sex') print(dic2) #{'name': 'sheep', 'id': 1001} dic2.pop('age') #报错 a=dic2.pop('sex') print(a) #boy
- 格式:dict.pop(key[,default])
-
dict.popitem()
- 随即删除一对键值对
- 有返回值的,元组
dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'} a=dic2.popitem() print(dic2,a) #{'sex': 'boy', 'id': 1001} ('name', 'sheep')
-
del dict[]
删除基
dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'} del dic2['sex'] print(dic2) #{'id': 1001, 'name': 'sheep'}
-
dict.clear()
清空
dic2={'sex': 'boy', 'id': 1001,'name': 'sheep'} dic2.clear() print(dic2) #{}
3.3.3改
- 直接修改
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
dic['id']=1002
print(dic)
#{'sex': 'boy', 'id': 1002, 'name': 'sheep'}
- dict.setdefault()
- 建存在,不改动,返回字典中的值
- 不存在,在字典中添加相应的键值对,并返回对应的值
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.setdefault('id',999))
print(dic)
print(dic.setdefault('age',16))
print(dic)
###########
1001
{'sex': 'boy', 'id': 1001, 'name': 'sheep'}
16
{'sex': 'boy', 'id': 1001, 'name': 'sheep', 'age': 16}
3.3.4查
- 字典值的访问
- 通过字典的key访问value
print(dic['id'])
#存在返回 不存在则报错
- dict.get()访问value
- 语法格式 dict.get(key[,default])
- 不确定字典中是否存在某个键而又想对其操作,比如获取值–>get方法
- 当key不存在的时候,不会抛出异常,返回None
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.get('age'))
#None
print(dic.get('age',12))
#12
3.4遍历
- dict.keys() 返回所有的key
- dict.values() 返回所有的值
- dict.items() 返回key和values
dic={'sex': 'boy', 'id': 1001,'name': 'sheep'}
print(dic.keys())
print(dic.values())
print(dic.items())
#dict_keys(['sex', 'id', 'name'])
#dict_values(['boy', 1001, 'sheep'])
#dict_items([('sex', 'boy'), ('id', 1001), ('name', 'sheep')])
for i in dic.items():
print(i[0],':',i[1])
#sex : boy
#id : 1001
#name : sheep
for i,j in dic.items():
print(i,':',j)
#结果同上
#举例
li=[22,33,55,66,88,45,95,99,79]
dic={'>=60':[],'<60':[]}
for i in li:
if i>=60:
dic['>=60'].append(i)
else:
dic['<60'].append(i)
print(dic)
4.集合
set()
4.1特点
- 无序
- 不可重复
- 不可改变
- 内部元素是可哈希的
- 集合本身是不可哈希的
- 用{}括起来的单元素数据集
- 用途
- 去重
- 关系测试
4.2创建
4.2.1空集合的创建
>>> st=set()
>>> st
set()
>>> st={}
>>> type(st)
<class 'dict'>
4.2.2多元素的集合创建
>>> st={1,2,5,6,9}
>>> type(st)
<class 'set'>
4.3强转
>>> li= ['city','cc','aa']
>>> st=set(li)
>>> type(st)
<class 'set'>
>>> st
{'cc', 'city', 'aa'}
>>> s='city'
>>> st=set(s)
>>> st
{'c', 't', 'i', 'y'}
>>> dic={'id':101,'name':'tom'}
>>> st=set(dic)
>>> st
{'id', 'name'}
>>> lu=list(dic)
>>> lu
['id', 'name']
4.4基本操作
4.4.1增
- set.add()
- set.update()
4.4.2删
- set.pop() 删除排序最小的一个元素
- set.discard() 移除元素不存在,会报错
- set.remove()
- del set
>>> li=[1,2,3,4,5,6,'a','b']
>>> s=set(li)
>>> s.pop()
1
>>> s.discard('a')
{2, 3, 4, 5, 6, 'b'}
>>> s.remove(2)
{3, 4, 5, 6, 'b'}
不可改、不可查
4.5遍历
li=['a','b','c',1,2,3]
s=set(li)
for a,b in enumerate(s,0):
print('(',a,b,')',end=' ')
#( 0 1 ) ( 1 2 ) ( 2 3 ) ( 3 b ) ( 4 a ) ( 5 c )
4.6集合基本运算
4.6.1子集
>>> a=set('asd')
>>> b=set('dsa')
>>> a,b
({'d', 'a', 's'}, {'d', 'a', 's'})
>>> a==b
True
>>> a>b
False
4.6.2交集
- &
- set.intersection
a=set('accqa')
b=set('gqebgeb')
print(a&b)
#{'q'}
print(a.intersection(b))
#{'q'}
4.6.3并集
- |
- set.union()
print(a|b)
#{'q', 'b', 'e', 'g', 'c', 'a'}
print(a.union(b))
#{'q', 'b', 'e', 'g', 'c', 'a'}
4.6.4差集
-
- set.diference()
print(a-b)
print(a.difference(b))
#{'c', 'a'}