欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python(五)字典 + 集合

程序员文章站 2022-07-09 19:10:16
...

文章目录

一、字典

键值对:age=18 或者 age:18 key-value
在 python 中保存这种键值对格式的数据的一种类型叫做字典 dict。
a = {“name”:“张三”,“age”:19,“sex”:“男”}
print(a[“age”])
19

注意:字典的 key 不能是可修改数据类型,例如列表就不能当字典的 key。
例如:a = {[1,]:“张三”,“age”:19,“sex”:“男”} # 错的
value 可以是任意数据类型。
a = {“name”:“张三”,“age”:19,“sex”:“男”}

print(a) # {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’}
a[‘score’]=99
print(a) # 没有的话添加 {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’, ‘score’: 99}
a[‘age’]=18
print(a) # 有的话覆盖 {‘name’: ‘张三’, ‘age’: 18, ‘sex’: ‘男’, ‘score’: 99}
setdefault()key存在不变,不存在添加
a.setdefault(‘age’,20)
print(a) # 存在不变 {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’}
a.setdefault(‘score’,90)
print(a) # 不存在添加 {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’, ‘score’: 90}

pop() 弹出key对应的value,a里面就不存在key:value了字典里面一定要有参数,不然报错,列表里面可以没有参数
b = a.pop(‘name’)
print(b) # 张三 弹出"name"对应的value,a里面就不存在了
print(a) # {‘age’: 19, ‘sex’: ‘男’}

popitem() 随机弹出一个key-value
b = a.popitem() # 随机弹出一个key-value
print(b) # (‘sex’, ‘男’)
print(a) # {‘name’: ‘张三’, ‘age’: 19}

a.clear() # 清空字典
print(a) # {}

del a # 删除一个整体,删完之后就不能用了
del a[“name”] # {‘age’: 19, ‘sex’: ‘男’}
print(a) # NameError: name ‘a’ is not defined

所有键都同时出现
print(a.keys()) # dict_keys([‘name’, ‘age’, ‘sex’])
for k in a.keys(): # 所有键
print(k)
name
age
sex

所有值都同时出现
print(a.values()) # dict_values([‘张三’, 19, ‘男’])
for v in a.values(): # 所有值
print(v)
张三
19

所有键所有值都同时出现,以元组出现
print(a.items()) # dict_items([(‘name’, ‘张三’), (‘age’, 19), (‘sex’, ‘男’)])
for kv in a.items():
print(kv)
(‘name’, ‘张三’)
(‘age’, 19)
(‘sex’, ‘男’)

for k,v in a.items():
print(k,v)
name 张三
age 19
sex 男

print(len(a)) # 3 3对键值对

update()没有的加上,有的覆盖
print(a) # {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’}
b = {“name”:“李四”,“score”:89}
a.update(b) # 没有的加上,有的覆盖
print(a) # {‘name’: ‘李四’, ‘age’: 19, ‘sex’: ‘男’, ‘score’: 89}

if “name” in a:
print(“有姓名”) # 有姓名
if “score” not in a:
print(“没有成绩”) # 没有成绩
if “张三” in a:
print(“张三在里面”) # in和not in 只对键起作用,对value不起作用

if “name” in a.keys(): # a.keys()和a效果一样,但不能画等号,a里面还有值,而a.keys()是所有键
print(“有姓名”) # 有姓名
if “score” not in a.keys():
print(“没有成绩”) # 没有成绩

a = {“name”:“张三”,“age”:19,“sex”:“男”}
b = []
c = {}
for k,v in a.items():
b.append((k,v))
print(b) # [(‘name’, ‘张三’), (‘age’, 19), (‘sex’, ‘男’)]

for x in b:
# print(x[0],x[1])
c[x[0]]=x[1]
print© # {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’}

for x,y in b:
c[x]=y
print© # {‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’}

a={‘name’: ‘张三’, ‘age’: 19, ‘sex’: ‘男’,“age”:20}
print(a) # {‘name’: ‘张三’, ‘age’: 20, ‘sex’: ‘男’} 有两个age后面的覆盖前面的(四个键)

a = {
‘001’:{‘name’: ‘张三’, ‘age’: 18, ‘sex’: ‘女’},
‘002’:{‘name’: ‘李四’, ‘age’: 28, ‘sex’: ‘男’},
‘003’:{‘name’: ‘王五’, ‘age’: 38, ‘sex’: ‘女’},
‘004’:{‘name’: ‘赵六’, ‘age’: 48, ‘sex’: ‘男’},

}
for k in a.keys():
if a[k][‘sex’] == ‘男’:
a[k][‘salary’] = 1000
print(a)
for k,v in a.items():
print(k,v)
Python(五)字典 + 集合

a = {
‘001’:{‘name’: ‘张三’, ‘age’: 18, ‘sex’: ‘女’},
‘002’:{‘name’: ‘李四’, ‘age’: 28, ‘sex’: ‘男’},
‘003’:{‘name’: ‘王五’, ‘age’: 38, ‘sex’: ‘女’},
‘004’:{‘name’: ‘赵六’, ‘age’: 48, ‘sex’: ‘女’},

}

for k,v in a.items():

print("num:",k,end=",")
# num: 001,
# num: 002,
# num: 003,
# num: 004,
for k1,v1 in v.items():
    print(k1,":",v1,end=",")
print()

num: 001,name : 张三,age : 18,sex : 女,
num: 002,name : 李四,age : 28,sex : 男,
num: 003,name : 王五,age : 38,sex : 女,
num: 004,name : 赵六,age : 48,sex : 女,

for k in a.keys():
print(“num:”,k,end=",")
# num: 001,
# num: 002,
# num: 003,
# num: 004,
for k1 in a[k].keys():
print(k1,":",a[k][k1] ,end=",")
print()
num: 001,name : 张三,age : 18,sex : 女,
num: 002,name : 李四,age : 28,sex : 男,
num: 003,name : 王五,age : 38,sex : 女,
num: 004,name : 赵六,age : 48,sex : 女,

二、集合

集合:集合是盛放多个数据的一种类型。
集合中的元素是无序的,唯一的(没有重复的)、不可改变类型。
可以使用大括号 { } 或者 set() 函数创建集合

注意事项:1.创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。2.集合中的元素必须是不可修改类型。

a = {1,2,3,4,3,3,3}
print(a,type(a)) # {1, 2, 3, 4} <class ‘set’> 重复的去掉
b = {}
print(type(b)) # <class ‘dict’>

空集合
a = set()
print(a,type(a)) # set() <class ‘set’>

a.add(9)
a.add(9)
print(a)
print(a[0]) # TypeError: ‘set’ object is not subscriptable 字典、集合无序,不支持索引

b = [1,2,3]
a = set(b)
print(a) # {1, 2, 3}

c = ‘1234’ # 字符串无序
d = set©
print(d) # {‘1’, ‘4’, ‘3’, ‘2’}

a = {1,2,3,4}
for x in a:
print(x)
1
2
3
4

a.update([1,2,5,6])
print(a) # {1, 2, 3, 4, 5, 6} 更新,没有的加上

b = {“name”:“zhangsan”,“age”:18}
a=set(b) # 转换成集合只剩下key
print(a) # {‘name’, ‘age’}

a = {1,2,3,4}
b = a.pop() # 无序的,随机弹出
print(b) # 1
print(a) # {2, 3, 4}

a.remove(2) # remove()删除的是值
print(a) # {1, 3, 4}

a.clear() # 清空集合
print(a) # set()

del a # 整个删除
print(a) # NameError: name ‘a’ is not defined

a = [1,2,3,1,2,3,1,1,3,3,3,3]
b = set(a)
for i in b :
print(i,“出现的次数:”,a.count(i))
1 出现的次数: 4
2 出现的次数: 2
3 出现的次数: 6

a = {1,2,3,4}
b = {3,4,5,6}
c = a.intersection(b) # a和b重复的 交集
d = a&b # &相当于and 作用一样
print© # {3, 4}
print(d) # {3, 4}

e = a-b
f = a.difference(b) # a跟b里面不一样的 # 差集 a在前面就是a
print(e) # {1, 2}
print(f) # {1, 2}

g = a^b # 异或
f = a.symmetric_difference(b) # 非交集
print(g) # {1, 2, 5, 6}
print(f) # {1, 2, 5, 6}