07 基本数据类型及内置方法(字典、集合)
一、字典
1.定义:在{}内用逗号分隔开多个元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key则必须是不可变类型。
info={"name":"tony","age":18,"sex":"male"} 或info=dict(name="tony",age=18,"sex"="male")
2.类型转换
(1)info=dict([["name","tony"],("age",18)])===>info={"name":"tony","age":18}
(2){}.formkeys((“name”,"age","sex"),None) ====>{"age":None,"age":None,"sex":None}
3.使用
3.1优先掌握的操作
1.按key存取值 (1)取 dic={"name":"egon", "age":18, "hobbies"=["play","basketball"]} dic["name"] ====>"egon" dic["hobbies"][0]======>"play" (2)对于赋值操作,如果key原先不存在于字典,则会新增 dic["gender"]="male" print(dic)====>dic={"name":"egon", "age":18, "hobbies"=["play","basketball"],"gender":"male"} (3)对于赋值操作,如果key原先存在于字典,则会修改对应value的值 dic["name"]="tony" =====> dic={"name":"tony", "age":18, "hobbies"=["play","basketball"]} 2.长度:len(dic)====>3 3.成员运算:in 和 not in "name" in dic====>True 4.删除: dic.pop("name") #通过指定字典的key来删除字典的键值对 dic={ "age":18, "hobbies"=["play","basketball"]} 5.keys:values,键值对items() dic={"name":"egon", "age":18, "hobbies"=["play","basketball"]} (1)获取字典所有的key:dic.keys() (2)获取字典所有的value:dic.values (3)获取字典所有的键值对:dic.items() 6.循环 (1)默认遍历的是字典的key for key in dic: print(key)=====>"name" "age" "hobbies" (2)只遍历key: for key in dic.keys(): print(key) (3)只遍历value: for key in dic.values(): print(key) (4)遍历value和key: for key in dic.items(): print(items)
3.2需要掌握的操作
1.get() (1)key存在,则获取key的值 dic={"k1":"egon","k2":"tom","k3":"jack"} dic.get("k1")====>"egon" (2)key不存在,不会报错而是默认返回None res=dic.get("xxx") print(res)=====>None (3)key不存在,可以设置默认的返回值 res=dic.get("xxx",666) print(res)=====>666 ps:字典取值建议使用get方法 2.pop(): dic={"k1":"egon","k2":"tom","k3":"jack"} v=dic.pop("k2“) #删除指定的key对应的键值对,并返回值 print(dic)===》dic={"k1":"egon","k3":"jack"} print(v)====》"tom" 3.popitem() dic={"k1":"egon","k2":"tom","k3":"jack"} item=dic.popitem() #随机删除一组键值对,并将删除的键值放到元组内返回 print(dic)====>dic={"k2":"tom","k3":"jack"} print(item)=====>item={"k1":"egon"} 4.update(): 用新字典更新旧字典,有则修改,无则添加 >>> dic= {'k1':'jason','k2':'Tony','k3':'JY'} >>> dic.update({'k1':'JN','k4':'xxx'}) >>> dic {'k1': 'JN', 'k3': 'JY', 'k2': 'Tony', 'k4': 'xxx'} 5.fromkeys() dic=dict.fromkeys(["k1","k2","k3'],[]) print(dic)=====>{'k1': [], 'k2': [], 'k3': []} 6.setdefault() (1)key不存在,则新增键值对,并将新增的value返回 dic={"k1":111,"k2":222} res=dic.setdefalut("k3",333) print(res)=====>333 print(dic)======>{"k1":111,"k2":222,"k3":333} (2)key存在则不做任何修改,并返回已存在可以对应的value值 dic={"k1":111,"k2":222} res=dic.setdefault("k1",666) print(res)====>111 print(dic)====>{"k1":111,"k2":222}
二、集合
1.作用:集合、list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算
2.定义:在{}内用逗号分割开多个元素,集合具备一下三个特点:
(1) 每个元素必须是不可变类型
(2)集合内没有重复的元素
(3)集合内元素无序
3.类型转换:但凡能够被for循环遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型
)都可以传给set()转换成集合类型
4.使用
(1)关系运算
friends1 = {"zero","kevin","jason","egon"} # 用户1的好友们 friends2 = {"Jy","ricky","jason","egon"} # 用户2的好友们 1.合集/并集:friends1|friens2 #求两个用户所有的好友(重复好友只留一个)
print(friends1.union(friends2)) 2.交集:friends1&friens2 #两个用户的共同好友
print(friends1.intersection(friends2)) 3.差集:friends1-friens2 #求用户1独有的好友
print(friends1.difference(friends2)) friends2-friens1 #求用户2独有的好友
print(friends1.difference(friends2)) 4.对称差集:friends1^friends2
print(friends1.symmetric.differnce(friends2)) 5.值是否相等:friends1 == friends2====>False 6.父子集:s1={1,2,3} print(s1.issuperset(s2)) s2={1,2} print(s2.issubset(s1)) s1>s2 包含则返回True,不包含则返回False.相等时互为父子。
(2)去重:
1. 只能针对不可变类型
2. 集合本身是无序的,去
重之后无法保留原来的顺序
针对不可变类型,并且保证顺序则需要我们自己写代码实现,例如 l=[ {'name':'lili','age':18,'sex':'male'}, {'name':'jack','age':73,'sex':'male'}, {'name':'tom','age':20,'sex':'female'}, {'name':'lili','age':18,'sex':'male'}, {'name':'lili','age':18,'sex':'male'}, ] new_l=[] for dic in l: if dic not in new_l: new_l.append(dic) print(new_l)
(3)其他操作
1.长度 s={1,2,3} print(len(s))====>3 2.成员运算 print(c in s ) ======>true 3.循环 for item in s: print(item)====>c a b
案例
""" 一.关系运算 有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合 pythons={'jason','egon','kevin','ricky','gangdan','biubiu'} linuxs={'kermit','tony','gangdan'} 1. 求出即报名python又报名linux课程的学员名字集合 2. 求出所有报名的学生名字集合 3. 求出只报名python课程的学员名字 4. 求出没有同时这两门课程的学员名字集合 """ # 求出即报名python又报名linux课程的学员名字集合 >>> pythons & linuxs # 求出所有报名的学生名字集合 >>> pythons | linuxs # 求出只报名python课程的学员名字 >>> pythons - linuxs # 求出没有同时这两门课程的学员名字集合 >>> pythons ^ linuxs