1.字典(dict)
1.什么是字典(dict)
字典是python内置的容器类的数据类型,可变,无序的。****字典的元素是键值对
2.字典的字面量{键:值}大括号里面是键值对,多个键值对里面 , 号隔开
键值对:(键:值)
键 - 不可变的数据;唯一的,一般使用字符串作为key
值 - 没有要求
dict0 = {(1,2):20,"aa":20}
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
print(dict0)
print(dict1)
dict0 = {(1,2):20,"aa":20,"aa":200}
print(dict0)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
print(dict1["name"])
print(list(dict1.keys()))
print(list(dict1.values()))
print(list(dict1.items()))
dict1.update(dict0)
print(dict1)
什么时候使用字典:如果一个容器里面存储的数据是不同意义的数据(数据之间要区分)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
dict1["name"] = "lorrbz"
print(dict1)
back = dict1.pop("name")
print(dict1)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
aa = dict1.popitem()
print(aa)
print(dict1)
print("name" in dict1)
3字典的增删改查
1.查
- a.获取单个值
字典[key] - 获取字典中key的值 如果key不存在,会报错。
字典.get() - 获取字典中key对应的值,如果key不存在,则会返回空值none
none 是Python中关键字,表示一个特殊值(没有,空的意思)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
print(dict1["name"],dict1.get("age"))
print(dict1["hobby"])
print(dict1.get("sex"))
print("name" in dict1)
- b.遍历 : 直接遍历字典拿到的是所有的key
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
for key in dict1:
print(key)
# 同时获取key和value
for key,value in dict1.items():
print(key,value)
for i in dict1.items():
print(i)
2. 增(添加键值对)
字典[key] = 值 当key不存在的时候,就是在字典中添加键值对
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
dict1["特长"] = "腿毛"
print(dict1)
3 更新。字典1.update(序列) - 将序列中的元素转换成键值对,然后再添加多字典1中
当key值有重名的时候,会用序列中键值对应的值,更新原字典的key对应的值
注意:这儿的序列要求是能够转换成字典的序列,序列中的元素是只有两个元素的序列
dict2 = {"a":"lorry","age":23}
dict3 = {"aa":"lorrybx","agea":2200}
dict2.update(dict3)
print(dict2)
dict3.update([[1,2],["aa",10000000]])
print("******",dict3)
dict2 = {"a":"lorry","age":23}
dict2.update([(1,2),("aaa",500),["lorry","sex"]])
print("====",dict2)
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["欧美"]["www.youporn.com"][0] = "高清无码"
print(av_catalog)
4.删
a.del 字典[key] - 删除字典中key对应的键值对
b.字典.pop(key) 去除字典中key对应的值
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
del dict1["name"]
print(dict1)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
back = dict1.pop("age") #删除键值对拿到的值,不信你打印
print(dict1)
print(back)
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
print("***",dict1.keys())
back2 = dict1.popitem()
print(dict1,back2) # 取出最后一个值
c.字典.clear() 情况字典中元素。(删除字典中所有的键值对)
dict1 = {"a":10,"b":50}
dict1.clear()
print(dict1)
5字典的运算
1.in 和 not in
key in 字典 - 判断字典中是否存在指定的key
dict1 = {"name":"lorry","age":23,"hobby":["girls","spa"]}
print("name" in dict1)
5.copy
字典.copy() 复制字典中所有的键值对,产生一个新的字典。
- 直接赋值会当字典改变时会相互影响
dict1 = {"a":10,"b":50}
dict2 = dict1
print(dict2)
print(dict1)
dict1["a"] = 1000
print("直接复制",dict2)
print("直接复制",dict1)
- 通过浅拷贝进行赋值后不会改变
dict1 = {"a":10,"b":50}
dict2 = dict1.copy()
print(dict2)
print(dict1)
dict1["a"] = 1000
print("浅拷贝dict2",dict2)
print("浅拷贝dict1",dict1)
6.dict.fromkeys()
dict.fromkeys(序列,值) 序列中的元素作为key,值作为所有key对应的默认值。
字典.get(keyt) —获取key对应的值,如果key不存在,返回none
字典.get(key,值) —如果key不存在,返回指定的值
dict3 = dict.fromkeys("abc",100)
print(dict3)
dict3 = dict.fromkeys(["name","age","height"],100)
print(dict3)
7.keys,values,items
字典.key() - 获取字典所有的key —返回序列,序列的元素就是字典的key
字典.values() - 获取字典所有的值 —返回序列,序列的元素就是字典的值
字典.items() - 获取字典所有的键值对 - 返回序列,序列中的元素是元组,元组的中的元素是key和值。
dict1 = {"a":10,"b":50,"c":"963"}
keys = dict1.keys() #返回值数序列。但不是列表
print(keys,type(keys))
for item in keys:
print(item)
print(dict1.values())
print(dict1.items())
8.setfault
字典.setfault: 给字典添加键值对,如果key本来就存在,不会修改键值对。
dict4 = {"x":23,"y":63,"p":986}
dict4.setdefault("xx","lorry")
print(dict4)
dict4 = {"x":23,"y":63,"p":986}
dict4.setdefault("x","96++66552232")
print(dict4)
2.集合
1.什么是集合
集合是Python内置的一个容器类的数据类型,是可变,无序的
字面量 - 使用{ }括起来,里面有多个元素
元素 - 不是键值对,必须是不可变,而且还是唯一的(去重)
set1 = {1,"hello",(1,3)}
print(set1)
set1 = {1,"hello",(1,3),1,True}
print(set1)
set2 = {} #空字典
print(type(set2))
set3 = set() #空集合
print(type(set3))
2.集合的增删改查
- aa.查(获取集合元素)
不能直接获取集合中单个元素,集合只能遍历
set1 = {1,"hello",(1,3),1,True,"aa","bb"}
for item in set1:
print(item)
- b.添加
集合.add
集合.updata -将序列中元素添加到集合中
set1 = {1,"hello",(1,3),1,True,"aa","bb"}
set1.add(10000000)
print(set1)
set1 = {1,"hello",(1,3),1,True,"aa","bb"}
set1.update([10,20])
print(set1)
set1 = {1,"hello",(1,3),1,True,"aa","bb"}
set1.update(range(10))
print(set1)
- c.删除
集合.remove (删除集合中的元素)
set1 = {1,"hello",(1,3),1,True,"aa","bb"}
set1.remove("hello")
print(set1)
+ * in not max min len set(需要自己实践)
2.数学集合运算
- 1 包含关系
集合1 >= 集合2 判断集合1是否包含集合2(集合2是否是集合1的子集)
集合1 <= 集合2 判断集合2是否包含集合1(集合1是否是集合2的子集)
print({1,2,3} >= {1,2})
print({1,2,3} >= {1,10})
print({1,2,3} <= {1,10})
- 2.求并集
集合1 + 集合2 (相当于加法)
set1 = {1,2,3,4}
set2 = {4,5,6,7}
set3 = set1 | set2
print("并集:",set3)
- 3.求交集
集合1 & 集合2 ()求两个集合公共的元素
set1 = {1,2,3,4}
set2 = {4,5,6,7}
set3 = set1 & set2
print("交集:",set3)
- 4.求差集
集合1 - 集合2 ()将集合1中包含有集合2的元素除开,剩下的集合
set1 = {1,2,3,4}
set2 = {4,5,6,7}
set3 = set1 - set2
print("差积:",set3)
- 5.求补集
集合1 ^ 集合2 两个集合中除开公共元素以外的 部分
方法一:
set1 = {1,2,3,4}
set2 = {4,5,6,7}
set3 = set1 ^ set2
print("补集:",set3)
方法一:
set4 = set1 | set2
set5 = set1 & set2
for item in set5:
set4.remove(item)
print("补集:::",set4)
3.函数
1.函数的定义
- a.定义函数就是实现某一某一特定功能的代码段的封装。
- b.分类
函数可以分为内置函数和自定义函数
内置函数:python已经声明好了,程序员直接调用的函数,print,input
(相当于已经造好的机器,程序员只需要知道机器的功能和使用方法。)
自定义函数:程序员自己用,程序员直接调用的函数,可以提供给别人用
2.函数的声明
语法:
def 函数名(形象列表)
函数说明文档
函数体
说明:
def - python中声明函数的关键字
函数名 - 自己命名,要求规范,标识符,不能是关键字
pep8。名字中字母小写,多个单词之间用下划线隔开、
见名知意(看到函数,大概知道函数的功能)
() - 固定写法
形参列表 - 形象名1,形象名2 ,,(可以有一个参数,也可以由多个参数,uekeyi没有)
形参的作用:从函数外部,向函数内部传递数据
:- 固定写法
函数说明文档 - 用来对函数功能进行说明的注释。这个注释需要使用三个双引号引起来。
函数体 - 实现函数功能的代码段。
c.初学者函数声明的过程
第一步:确定函数功能
第二部:根据函数功能确定函数名。
第三部:确定参数列表,需不需要传递额外的数据
第四部:实现函数的功能
第五步:确定返回值
def save_sum(a,b):
sum_ab = a+b
print(sum_ab)
save_sum(10,20)
save_sum(100,200)
def dayin_xing(n):
print("*"*n)
dayin_xing(10)
# 声明一个函数求1+2+3+...n
def sum_n(n):
sum1 = 0
for i in range(n+1):
sum1 += i
print(sum1)
sum_n(3)
3.函数的调用
(重点)函数在声明的时候,不会执行函数体,只有在调用的时候才会执行。
a.语法:
函数名(实参列表)
b.说明:
函数名 - 已经声明过的函数。先声明才能调用。
() - 固定写法。
实参列表 - 实参就是给形参赋值,传递给函数内部的数据
目前来说 形参有多少,实参有多少。
网友评论