python基础三
一、字典disc
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的.
数据类型分为:可变数据类型、不可变数据类型
不可变数据类型:元组、bool、int、str 这些数据类型可哈希
可变数据类型:列表list、字典dict、集合set 这些数据类型不可哈希
字典的key必须是不可变的数据类型,可哈希
字典的value可以是任意数据类型
字典的优点:二分查找去查询 储存大量的关系型数据
字典的特点:无序的
1.1 增:
dic = {'name':'lucy','sex':'woman','age':18} dic['hight'] = 180 #没有键的时候,则添加 dic['age'] = 16 #字典中原本就有此键,则值会覆盖掉原来的 dic.setdefault('weight') #默认值是None dic.setdefault('weight',150) dic.setdefault('name','二哥') #键有的话不做任何改变,没有才添加 print(dic)
1.2删:
dic = {'name':'lucy','sex':'woman','age':18} dic.pop('age') #有返回值 返回删除的键对应的值 参数必须写,不写则会报错,跟列表list有区别 print(dic) print(dic.pop('djhs','没有此键')) #可设置返回值 dic.popitem() #随机删除 有返回值,返回元组形式删除的键和值 print(dic) dic.clear() #清空字典 print(dic) del dic['name'] #存在则删除,不存在则报错 print(dic) del dic #删除字典 print(dic)
1.3改:
dic = {'name':'lucy','sex':'woman','age':18} dic2 = {"name":"alex","weight":75} dic2.update(dic) # 将dic所有的键值对覆盖添加(相同的覆盖,没有的添加)到dic2中 print(dic2) #{'weight': 75, 'sex': 'woman', 'name': 'lucy', 'age': 18} print(dic) #{'sex': 'woman', 'name': 'lucy', 'age': 18}
1.4查:
dic = {'name':'lucy','sex':'woman','age':18} print(dic.keys()) #dict_keys(['name', 'sex', 'age']) print(dic.values()) #dict_values(['lucy', 'woman', 18]) print(dic.items()) #dict_items([('name', 'lucy'), ('sex', 'woman'), ('age', 18)]) for i in dic: print(i) #name age sex for i in dic.values(): print(i) #woman lucy 18 for k,v in dic.items(): print(k,v) # age 18 # sex woman # name lucy v1 = dic['name1'] # print(v1) #报错 print(dic.get('name1')) #None 没有这个键,不会报错 所以首选get print(dic.get('name1','没有这个键'))
1.5字典嵌套
dic = { 'name':['张三','李四','王五'], 'info':{ 'addr':'beijing', 'date':'20171220' }, 'age':20 } dic['age'] = 22 dic['name'].append('马七') dic['info']['addr'] = dic['info']['addr'].upper() print(dic)
1.6删除下列字典中含有'k'的键对应的值
dic = {'k1':'v1','k2':'v2','a3':'v3'} #方法一 dic1 = {} # 创建一个空的字典 for i in dic: if 'k' not in i: dic1.setdefault(i,dic[i]) #将不含‘k’的键以及对应的值添加到dic1中 dic = dic1 print(dic) #方法二 l = [] #创建一个空的列表 for i in dic: if 'k' in i: l.append(i) #将含有‘k’的键追加到列表l中 for i in l: #变量列表l,每个i正好是字典中含有'k'的键,通过del删除该键及对应的值 del dic[i] print(dic)
二、集合
集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希的(集合是可变的数据类型)。
集合最重要的两个特点是:
a:去重,把一个列表变成集合,就自动去重了。
b:关系测试,测试两组数据之间的交集、差集、并集等关系。
2.1:集合的创建。
set1 = set({1,2,'hjm'}) # 创建方法一 set2 = {1,2,'hjm'} # 创建方法一 print(set1,set2) # {'hjm', 1, 2} {'hjm', 1, 2}
2.2:集合的增。
set1 = {'lucy','jim','lily','hello','world'} # add set1.add('张三') print(set1) # update: 迭代着添加 set1.update('Ab') #{'lucy', 'b', 'A', 'lily', 'hello', 'world', 'jim'} set1.update([1,2,3]) #{1, 'lily', 'lucy', 2, 3, 'jim', 'world', 'hello'} set1.update('中国') #{'lucy', '中', 'hello', 'world', 'lily', '国', 'jim'} print(set1)
2.3:集合的删。
set1 = {'lucy','jim','lily','hello','world'} #remove 删除一个指定元素 set1.remove('jim') # {'hello', 'world', 'lucy', 'lily'} #pop 随机删除一个元素 set1.pop() # {'world', 'hello', 'lucy', 'lily'} #clear 清空集合 set1.clear() # set() #del 删除集合 del set1 print(set1)
2.4:集合的查。
set1 = {'a','bb','ccc','f','d'} for i in set1: print(i)
2.5:集合的其它操作
2.5.1交集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set3 = set1 & set2 print(set3) # {4, 5}
2.5.2并集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set4 = set1 | set2 print(set4) # {1, 2, 3, 4, 5, 6, 7, 8}
2.5.3反交集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set5 = set1 ^ set2 print(set5) # {1, 2, 3, 6, 7, 8}
2.5.4差集
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set6 = set1 - set2 #set1中独有的 print(set6) # {1, 2, 3}
2.5.5子集
set1 = {1,2,3} set2 = {1,2,3,4,5} set3 = {1,2,5,6} print(set1 < set2) # True print(set1 < set3) # False
2.5.6超集
set1 = {1,2,3} set2 = {1,2,3,4,5} set3 = {1,2,5,6} print(set2 > set1) # True print(set3 > set1) # False
2.5.7 frozenset不可变集合,让集合变成不可变类型
s = frozenset('barry') print(s,type(s)) # frozenset({'a', 'b', 'r', 'y'}) <class 'frozenset'>