字典功能&集合一

一、字典【重点掌握】

本质:是一个无序的,key是唯一的,可变的集合

1.系统功能
# 1.增
dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"}
print(dict1)
# a.key不存在的情况下,字典[key] = value          ******
dict1["height"] = 182.0
print(dict1)

# b.update(),更新,合并字典,将指定字典中的键值对合并到原字典中          ******
# dict1.update(dict2):将dict2中的所有键值对添加到dict1中
dict2 = {'aaa':10}
# 如果key不存在,则添加键值对
dict1.update(dict2)
print(dict1)
print(dict2)

# 如果key存在,则修改指定键对应的值
dict3 = {"name":"李四"}
dict1.update(dict3)
print(dict1)

# c.setdefault(key,default)
dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"}
print(dict1)
# 如果default省略,向字典中添加key:None
dict1.setdefault("111")
print(dict1)
# 如果default未省略,则向字典中添加key:default
dict1.setdefault("222","hello")
print(dict1)

# 2.删
# a.pop(key):通过指定key删除键值对,返回对应的value                    ******
dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"}
print(dict1)
r = dict1.pop("age")
print(dict1)
print(r)
# dict1.pop("height")  # KeyError: 'height'

# d = dict1.pop("weight",None)
# print(dict1)
# print(d)

# 需求:删除不报错
if dict1.get("weight"):
    print("key存在")
    dict1.pop("weight")
else:
    print("key不存在")

print("*" * 20)

# b.popitem()
# 在Python3.7之前,表示随机删除一对键值对,Python3.7之后,可以理解为删除最后一对键值对
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
print(dict1)
dict1.popitem()
print(dict1)

# c.del
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
print(dict1)
del dict1["age"]
print(dict1)


# d.clear()
dict1.clear()
print(dict1)
# del dict1


# 3.改
# 语法:字典[key] = value
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
print(dict1)
dict1["age"] = 20
print(dict1)


# 4.查
# a.get(key):获取指定key对应的value
# b.keys():获取所有的key
# c.values():获取所有的value
# d.items():获取所有的键值对
# e.len():获取键值对的对数

# 5.其他
# 关于拷贝,字典和列表中的用法完全相同
# a.=引用赋值
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
dict2 = dict1
print(dict1 is dict2)
dict1['name'] = "jack"
print(dict2)


# b.copy(),和列表中的用法完全相同
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
dict2 = dict1.copy()
print(dict1 is dict2)
dict1['name'] = "jack"
print(dict2)

dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}]
dict2 = dict1.copy()
print(dict1 is dict2)
dict1[-1]['name'] = "tom"
print(dict2)

# c.copy.copy()
import  copy
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
dict2 = copy.copy(dict1)
print(dict1 is dict2)
dict1['name'] = "jack"
print(dict2)

dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}]
dict2 = copy.copy(dict1)
print(dict1 is dict2)
dict1[-1]['name'] = "tom"
print(dict2)

# d.copy.deepcopy()
dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18}
dict2 = copy.deepcopy(dict1)
print(dict1 is dict2)
dict1['name'] = "jack"
print(dict2)

dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}]
dict2 = copy.deepcopy(dict1)
print(dict1 is dict2)
dict1[-1]['name'] = "tom"
print(dict2)
2.字典推导式
# 列表推导式:[元素的规律 for循环  if语句]
# 字典推导式:{key:value for循环  if语句}

# 1.需求:已知字典dict1 = {'a':10,'b':20},交换key和value,生成一个新的字典   【面试题】
dict1 = {'a':10,'b':20}
# 方式一
dict2 = {}
for key,value in dict1.items():
    dict2[value] = key
print(dict2)

# 方式二
dict2 = {value:key for key,value in dict1.items()}
print(dict2)

# 2.需求:编写程序,生成一个新的字典{0:0,1:1,2:4,3:9,4:16,5:25}
dict3 = {i:i ** 2 for i in range(6)}
print(dict3)

# 3.需求:编写程序,生成一个新的字典{1:1,3:9,5:25,7:49,9:81}
dict4 = {i:i ** 2 for i in range(1,10,2)}
print(dict4)

dict4 = {i:i ** 2 for i in range(1,10) if i % 2 == 1}
print(dict4)

# 4.【面试题】和列表推导式的使用方式相同,for循环可以书写多个,if语句也可以书写多个,从左往右表示嵌套
dict5 = {x:y for x in "abc" for y in "xyz"}
print(dict5)

二、集合【掌握】

1.概念

Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算

set与dict类似,但是与dict的区别在于只是一组key的集合,不存储value

本质:无序且无重复元素的集合

表示:{},注意:如果直接使用{}则默认表示字典

2.创建
"""
【面试题】列表,元组,字典,集合和字符串的区别
列表:
    表示形式:[元素1,元素2....]
    本质:是一种有序的,可变的,可以存储重复元素的,可以存储不同类型数据的集合
元组:
    表示形式:(元素1,元素2....)
    本质:是一种有序的,不可变的,可以存储重复元素的,可以存储不同类型数据的集合
字典:
    表示形式:{key1:value1....}
    本质:是一种有序的,可变的,key不允许重复,value可以重复,key只能是不可变的数据类型,存储键值对的集合
集合:
    表示形式:{元素1,元素2....}
    本质:是一种无序的,可变的,不允许元素重复的,可以存储不同类型数据集合
字符串:
    表示形式:双引号  单引号   三引号
    本质:是一种有序的,不可变的,可以存储重复字符的集合
"""

# 1.注意:{}为空则表示字典
# 【面试题】下面代码打印的结果是什么
set1 = {}
print(type(set1))  # <class 'dict'>

# 2.空集合
set2 = set()
print(set2)

# 3.{}不为空,其中的元素不是键值对,则表示集合
dict1 = {"a":10}
print(type(dict1))   # <class 'dict'>
set1 = {"a",10}
print(type(set1))   # <class 'set'>

# 说明1:列表和元组都是允许重复元素存在的,所以将列表和元素转化为集合,会警告
set2 = set([34,4,6,78])
print(set2)
set2 = set((34,4,6,78))
print(set2)

# 说明2:集合是无序的,排重的,该特点类似于字典中的key
set2 = set({'a':10,"b":20,"c":30})
print(set2)  # {'a', 'b', 'c'}

# 4.
# 注意1:集合是无序的
set4 = {45,4,656,5,677,87,9}
print(set4)
# 注意2:集合是排重的
set4 = {45,4,656,9,5,9,677,87,9,9,9,9,9,9}
print(set4)


# int(x)   float(x)   bool(x)  str(x)  list(x)   tuple(x)   dict(x)   set(x)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值