Python基础 P7 字典和集合

Python基础 P7 字典和集合

在这里插入图片描述

字典

在这里插入图片描述

字典是python中唯一实现了映射关系的内置关系,字典活跃在python程序的背后,即便你的源码里并没有直接用到它

映射关系是一种程序设计技术,用于实现面向对象编程语言里不同类型的数据之间的转换,从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”;在数学术语上,指两个元素集之间元素相互“对应”的关系
映射类型区别于序列类型,序列类型以数组的形式存储,通过索引的方式来获取相应位置的值,一般索引值与对应位置存储的数据是毫无关系的

字典基础

python中的字典把这个字(或单词)称为“键”(key),把其对应的含义称为“值(value)”;python的字典在有些地方称为哈希(hash),有些地方称为关系数组


创建和访问字典

创建字典需要使用大括号{ }
内部字典由“”和“”共同构成,由:区分
每一对键值组合称为“

字典的键值必须独一无二,但值可以相同,值可以取任何数据类型,但必须是不可变得,如字符串、数或元组

方法一:根据映射关系创建

dict1 = {'键1':1, '键2':2, '键3':3}

方法二:根据dict()内置函数创建

dict1 = dict{1 =1,2 =2,3 =3}

方法三:直接给字典赋值(相当于添加与修改)

dict1 = {'键1':1, '键2':2, '键3':3}
dict1['键4'] =4
dict2['键1'] =5

方法四:使用zip()进行创建

dict1 = dict{zip(['键1', '键2', '键3'],['值1', '值2', '值3'])}

在这里插入图片描述

# 创建一个空字典
dict1 = {}
print(dict1)

# 方法1:使用大括号创建字典
dict2 = {'a': 1, "b": 2, "c": 3}
print(dict2)print(dict2['a'], dict2['b'], dict2['c'])

# 方法2:使用内置函数创建字典
dict3 = dict(d=4, e=5, f=6)
print(dict3)
print(dict3['d'], dict3['e'], dict3['f'])

# 方法3:对字典进行修改和添加实现字典创建
dict3['f'] = 66
print(dict3)
dict3['g'] = 7
print(dict3)

# 方法4:使用zip()对字典进行创建
dict4 = dict(zip(['g','h','i'],[8,9,10]))
print(dict4)

在这里插入图片描述

内置函数

增操作fromkeys()

fromkeys()方法用于创建并返回一个新的字典,它有两个参数,第一参数是字典的键,第二参数是可选的,是传入键对应的值,如果不提供,那么默认是None

在这里插入图片描述

dict1 = {}
dict1 = dict1.fromkeys((1, 2, 3))
print(dict1)

dict2 = {}
dict2 = dict2.fromkeys((1, 2, 3), "a")
print(dict2)

在这里插入图片描述

删操作pop()、popitems()和clear()

pop是给定键弹出对应的值,而popitem是弹出一个项
可以使用clear来清除字典

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)

print(dict1.pop('b'))
print(dict1)

print(dict1.popitem())
print(dict1)

dict1.clear()
print(dict1)

在这里插入图片描述

改操作update()

update可以用来更新字典

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)
print(dict1)

dict1.update(d=44)
print(dict1)

在这里插入图片描述

查操作get()和in/not in

get()可以更宽松的访问字典项,当键不存在的时候不会报错, 也可以在第二个参数位置设置不存在的返回值

可以使用成员资格操作符来判断键是否存在,使用in或not in

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)
print(dict1.get('a'))
print(dict1.get('f'))
print(dict1.get('f', '不存在'))

print('a' in dict1)
print('f' in dict1)

在这里插入图片描述

视图对象keys(),values(),items()

keys用于返回字典中的
value用于返回字典中所有的
items用于返回字典里所有的

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)
print(dict1.keys())
print(dict1.values())
print(dict1.items())

在这里插入图片描述

拷贝copy()

copy方法是用于浅拷贝整个字典

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)
dict2 = dict1.copy()

print('dict1 id:', id(dict1))
print('dict2 id:', id(dict2))

print('dict1:', dict1)
print('dict3:', dict2)

在这里插入图片描述

setdefault()

setdefault方法与get有点相似,但是,setdefault在字典中找不到相应的键时会自动添加

在这里插入图片描述

dict1 = dict(a=1, b=2, c=3, d=4, e=5)

print(dict1.setdefault('a'))

print(dict1)
print(dict1.setdefault('f'))
print(dict1)

在这里插入图片描述

其他函数

键值数量len()

使用len函数来获取字典的键值对数量

在这里插入图片描述

dict1 = {'a': 1, "b": 2, "c": 3}
print(len(dict1))

在这里插入图片描述

列表转换list()

通过list(dict1)可以将字典的键转化为列表,可以使用list(dict1.values)将值转换为列表

在这里插入图片描述

dict1 = {'a': 1, "b": 2, "c": 3}
print(list(dict1))
print(list(dict1.values()))

在这里插入图片描述

迭代器转换iter()

iter会将字典的键构成一个迭代器

在这里插入图片描述

dict1 = {'a': 1, "b": 2, "c": 3}
e = iter(dict1)
print(next(e))
print(next(e))
print(next(e))
print(next(e))

在这里插入图片描述

逆向序列reversed()

reversed可以将字典的键进行逆向操作

在这里插入图片描述

dict1 = {'a': 1, "b": 2, "c": 3}
print(list(reversed(dict1)))
print(list(reversed(dict1.values())))

在这里插入图片描述

嵌套与推导式

字典嵌套

字典也可以嵌套,字典里面可以嵌套字典字典里面也可以嵌套列表

在这里插入图片描述

dict1 = {'a': {'a1': 1, 'a2': 2}, "b": {'b1': 3, 'b2': 4}, "c": {'c1': 5, 'c2': 6}}
dict2 = {'a': [9, 8, 7], "b": [6, 5, 4], "c":  [3, 2, 1]}
print(dict1['b']['b2'])
print(dict2['c'][0])

在这里插入图片描述

字典推导式

在这里插入图片描述

dict1 = {x: ord(x) for x in "Cage"}
print(dict1)

在这里插入图片描述

集合

在这里插入图片描述

集合基础

如果用大括号括起来,又没有体现出映射关系,那么python就会认为这堆数据是一个集合而不是映射,而且集合的的内容是唯一的这一点跟字典的键值是一样的;集合是无序的,也就是不能试图去索引集合中的某一个元素。

集合创建、访问、添加和删除

在这里插入图片描述

# 直接创建集合
set1 = {1, 2, 3, 4, 4, 4}
print(set1)

# 内置函数创建集合
set2 = set(['c', 'a', 'g', 'e'])
print(set2)
# in/not in
print(2 in set1)
print('b' in set2)

# add和remove
set1.add(5)
print(set1)
set2.remove('a')
print(set2)

在这里插入图片描述

内置函数

复制copy()

复制集合的方法copy

在这里插入图片描述

a = set("Cage")
print(a)
b = a.copy()
print(b)

在这里插入图片描述

集合关系issubset() 、issuperset()和isdisjoint()

issubset() 判断该集合是否为另一个集合的子集
issuperset() 判断该集合是否为另一个集合的超集
isdisjoint() 用来判断两个集合之间是否相关

在这里插入图片描述

a = set("Cage")
print(a.issubset("Cage Hello"))
print(a.issuperset("Ca"))
print(a.isdisjoint(set("C")))

在这里插入图片描述

不可变集合frozenset

有时候希望集合中的数据具有稳定性,也就是说,像元组一样,不能随意地增加或删除集合中的元素。那么可以定义成不可变集合。

在这里插入图片描述

set1 = frozenset({1, 2, 3, 4, 4, 4})

print(set1)set1.add(5)
print(set1)

在这里插入图片描述

删操作pop()和clear()

pop()用于随机从集合中弹出一个元素
clear()将集合清空

在这里插入图片描述

a = set("Cage")
print(a.pop())
print(a.clear())

在这里插入图片描述

进阶练习

更多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CagePan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值