python——集合与字典

126 阅读4分钟

集合

可变类型

集合的特点

①集合具有无序,不重复的性质

②集合不支持索引

③集合能去除重复数据

集合的创建

#创建有数据集合

set1 = {1, 2, 3, 44, 5, "张三", "李四"}
set2 = set("1234'张三'")
print(set1)
print(set2)  # >>>{'张', '三', "'", '4', '3', '1', '2'}   将字符串各个数据添加到集合,并将结果随机排序打印

# 创建空集合
set3 = set()
print(set3)    
>>>set()

集合的常见操作

增加
# add()
set4 = {1, 2, 3, "张三", "李四"}
print(id(set4))
set4.add("王五")
set4.add(1)  # 当集合中存在时,不进行任何操作
print(set4)  # 打印结果元素随机排序
print(id(set4))  # id和修改前id相同,为可变类型

#update()

set5 = {1, 2, 3, "张三"}
list1 = [4, 5, 6, "李四"]
var1 = "789"
set5.update(list1)
print(set5)  # >>>{1, 2, 3, 4, '张三', 5, 6, '李四'} 结果将列表中元素逐一添加到集合中
set5.update(var1)
print(set5)  # >>>{1, 2, 3, 4, 5, 6, '9', '李四', '7', '张三', '8'}  结果将字符串元素逐一添加到集合中
删除数据
set1 = {1, 2, 3, 44, 5, "张三", "李四"}

#remove():删除集合中的指定数据,如果数据不存在则报错。
set1.remove("张三")
print(set1)
# set1.remove("坤哥")   # 数据不存在集合时,报错

#discard():删除集合中的指定数据,如果数据不存在也不会报错。
set1.discard(1)
print(set1)
set1.discard("坤哥")  # 数据不存在时集合时,不报错

#pop()   随机删除数据,并返回数据

print(set1.pop())  # 或者 a = set1.pop()   print(a)
print(set1)

#clear():清空集合
set1 = {1, 2, 3, 44, 5, "张三", "李四"}
set1.clear()
print(set1)    # >>>set()
查找数据
#in 和 (not in)

set6 = {1,2,4}

print(2 in set6)            #True
print("坤哥" in set6)       #False
print(2 not in set6)        #False
print("坤哥" not in set6)   #True

字典

可变类型

字典的应用场景

思考:一个班级,100人,如何快速存储姓名,性别,年龄?

字典⾥⾯的数据是以键值对形式出现,字典数据和数据顺序没有关系,即字典不⽀持下标,后期⽆论数据如何变化,只需要按照对应的键的名字查找数据即可。

                姓名:张三,年龄:22,性别:男
                姓名:李四,年龄:21,性别:男
                姓名:王五,年龄:24,性别:男
                姓名:阿坤,年龄:25,性别:男

字典的创建

符号为⼤括号

数据为键值对形式出现

各个键值对之间⽤逗号隔开

# 有数据的字典的创建
dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
# 空字典的创建
dict2 = {}
dict3 = dict()

#注意:⼀般称冒号前⾯的为键(key),简称k;冒号后⾯的为值(value),简称v。

字典的常见操作

增加数据

写法:字典序列[key] = 值

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
dict1["love1"] = "唱歌"
print(dict1)
dict1["love"] = "只因"  # 存在,修改
print(dict1)
#键存在则修改该键对应的值,若不存在则添加 
删除数据
#del : 删除字典或删除字典中指定键值对

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
print(dict1)
del dict1["love"]
print(dict1)
del dict1      # 删除字典
# print(dict1)  # 报错

#clear(): 清空字典

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
print(dict1)
dict1.clear()  # 清空字典
print(dict1)  # >> {}
修改数据

写法:字典序列[key] = 值

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
dict1["name"] = "李四"
print(dict1)

#注:如果key存在则修改这个key对应的值 ;如果key不存在则新增此键值对
查找数据
#key根据键查找值

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
print(dict1["name"])
print(dict1["age"])
print(dict1["sex"])
# print(dict1["id"])  # 若键不存在,则报错

#get()

# 字典序列.get(key, 默认值)   若键不存在返回默认值(默认为空None)
dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
a = dict1.get("name")
b = dict1.get("id", 180)  # 键id不存在,返回180
c = dict1.get("id")  # 键id不存在,返回None
print(a, b, c)

#keys():查找所有的键

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
a = dict1.keys()
print(a)  
>>>dict_keys(['name', 'age', 'sex', 'love'])

#values():查找所有的值

b = dict1.values()
print(b)   
>>>dict_values(['张三', '18', '男', '跳舞'])

#items():查找所有的键值对

c = dict1.items()
print(c)  
>>>dict_items([('name', '张三'), ('age', '18'), ('sex', '男'), ('love', '跳舞')])

字典的遍历

for循环

# 遍历若有的键
dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
# 方法一
for data in dict1.keys():
    print(data, end=" ")
print()
#方法二
for data in dict1:
    print(data, end=" ")
print()

# 遍历所有的值
for data in dict1.values():
    print(data, end=" ")
print()

# 遍历所有的键值对
for data in dict1.items():
    print(data)

拆包

# 拆包
list1 = ["张三", "李四"]
tul1 = ("张三", "李四")
set1 = {"张三", "李四"}
a, b = list1
print(a, b)
c, d = tul1
print(c, d)
e, f = set1
print(e, f)  # 集合拆包随机分配

可变类型

dict1 = {"name": "张三", "age": "18", "sex": "男", "love": "跳舞"}
print(id(dict1))
dict1["love1"] = "唱歌"
print(id(dict1))  # 修改前和修改后内存地址不变,则为可变类型