14 . 字典dict
#字典与列表相似,都是可变序列,但字典是无序的
#有序:意味着有索引值
#字典保存的内容是:键值对形式
键值对特点:键是唯一的,而值可以重复
写法:
-
字典用花括号
# -- coding: utf-8 -- dt = {'id':10,'username':'asdads','pwd':'213213213'} print(dt)
-
创建空字典
dt={} print(dt)
-
用映射创建字典
#两列表创建 ls1 = [1,2,3] ls2 = ['a','b','c'] print(dict(zip(ls2,ls1))) #元组和列表创建 ls1 = [1,2,3] tp2 = ('a','b','c') print(dict(zip(tp2,ls1))) #有重复值 ls1 = (1,2,3,4) tp2 = ('a','b','c','b') print(dict(zip(tp2,ls1))) ##{'a': 1, 'b': 4, 'c': 3}
-
通过关键字参数创建(键名不用加引号,键值正常写)
dt = dict(id=10,username='wsad',pwd='slakdjk12213') print(dt) ## {'id': 10, 'username': 'wsad', 'pwd': 'slakdjk12213'}
-
字典推导式
import random dt = {i:random.randint(1,100) for i in range(1,11)} print(dt) #扩展:值为随机数值的列表 dt2 = {i:[x for x in range(random.randint(1,10))] for i in range(10)} print(dt2)
字典操作
-
清空字典
dt = dict(id=10,username='asdds',pwd='123123') dt.clear() print(dt) #{}
-
访问字典
dt = dict(id=10,username='asdds',pwd='123123') print(dt) print(dt['id']) ##{'id': 10, 'username': 'asdds', 'pwd': '123123'} ##10 print(dt['xx']) #报错 print(dt.get('xx')) #不存在则返回None,存在就返回对应的值 ,不会报错,而直接用键就会报错
-
增加
dt = dict(id=10,username='asdds',pwd='123123') print(dt) dt['age']=20 print(dt)
-
删除
dt = dict(id=10,username='asdds',pwd='123123') dt.pop('id') print(dt) #{'username': 'asdds', 'pwd': '123123'} # del dt['id'] #删除键‘id’ # dict.clear() #清空字典 # del #删除字典
-
修改
dt = dict(id=10,username='asdds',pwd='123123') dt['id']=12 print(dt) #{'id': 12, 'username': 'asdds', 'pwd': '123123'}
-
遍历
dt = dict(id=10,username='root',pwd='123456',age=20) for key in dt: print(key,dt[key]) ## #id 10 #username root #pwd 123456 #age 20 for key,value in dt.items(): print(key,value) ## #id 10 #username root #pwd 123456 #age 20 for i in dt.items():#以元组形式返回 print(i) ## #('id', 10) #('username', 'root') #('pwd', '123456') #('age', 20)
-
dict.keys()
dt = {'a':1,'b':2,'c':3} print(dt.keys()) #dict_keys(['a', 'b', 'c'])
-
dict.values()
dt = {'a':1,'b':2,'c':3} print(dt.values()) #dict_values([1, 2, 3])
-
divt.fromkeys()
list = ['a','b','c'] dt1 = {} dt1 = dt1.fromkeys(list,0) print(dt1) #dict_values([1, 2, 3])
15 集合:
集合是保存不重复的元素:集合主要用途是“去重“
集合不能放列表,字典,集合,只能放元组和基本类型
集合是无序,可变的序列
-
集合的创建
#声明方法 st = {41,2,3,1,8} print(st)#无序,去重
注意:集合中存在重复的内容会自动去重
-
空集合set()
dt = {} #空字典 print(type(dt)) st = set() print(st) ## #<class 'dict'> #<class 'set'>
-
使用set()创建集合
st = set('hello') st2 = set(['hello','python','js']) st3 = {(12,3,4,56)} print(type(st2)) print(type(st3)) ## <class 'set'> <class 'set'> <class 'set'>
-
集合添加
st = set() st.add('hello') st.add('world') st.add('php') #{'world', 'hello', 'php'}
-
集合删除
st.remove('php') print(st) #{'world', 'hello'}
-
集合遍历
st = {'hello','python','js'} for i in st: print(i) #js #hello #python
-
交集,并集,差集
交集:&
并集:|
差集:-
st1 = {'php','python','java','go','c','c++'} st2 = {'linux','html','js','java','python'} print(st1 & st2) print(st1 | st2) print(st1 - st2) print(st2 - st1) # {'java', 'python'} # {'c++', 'js', 'go', 'linux', 'java', 'c', 'python', 'html', 'php'} # {'c++', 'php', 'go', 'c'} # {'js', 'linux', 'html'}
-
集合更新:
set.update():方法用于修改当前集合,可以添加新的元素或集合到当前集合中,如果添加的元素在集合中已存在,则该元素只会出现一次,重复的会忽略。
#主要是用来添加元素 st = {1,2,3,4} st2 = {7,1,2,4,5} st2.update(st) print(st2) #可以添加一个集合到集合中,add()方法只能添加一个元素
练习题:构造一个字典,以26个大写字母为键,随机数元组,并且找出在全部元组中出现的元素
#用标志方法
import random
dt ={}
for i in range(65,91):
dt[chr(i)] = tuple(random.randint(9,10) for x in range(random.randint(5,10)))
ls = []
st = set(x for x in dt['A'])
dt1 ={'A':(1,2,3,4),'B':(1,2,5,4)}
for j in st:
flag =0
for z in dt:
if j in dt[z]:
continue
else:
flag=1
break
if flag==0:
ls.append(j)
print(ls)
#2.用交集的方法
import random
dt ={}
for i in range(65,91):
dt[chr(i)] = tuple(random.randint(9,10) for x in range(random.randint(5,10)))
st =set(dt['A'])
for i in dt:
st= st&set(dt[i])
print(list(st))