Python基础·序列(集合与字典)详解

字典(dict)

- 字典属于一种新的数据结构,称为映射(mapping)
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能很好,但是查询数据的性能的很差
- 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
- 在查询元素时,字典的效率是非常快的
- 在字典中可以保存多个对象,每个对象都会有一个唯一的名字
    这个唯一的名字,我们称其为键(key),通过key可以快速的查询value
    这个对象,我们称其为值(value)
    所以字典,我们也称为叫做键值对(key-value)结构
    每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)

使用 {} 来创建字典

d = {
    
    } # 创建了一个空字典
创建一个保护有数据的字典
语法:
 {
    
    key:value,key:value,key:value}

字典的值可以是任意对象
字典的键可以是任意的不可变对象(int、str、bool、tuple …),但是一般我们都会使用str
字典的键是不能重复的,如果出现重复的后边的会替换到前边的

d = {
    
    'name':'孙悟空' , 'age':18 , 'gender':'男' , 'name':'sunwukong'}
d = {
    
    
'name':'孙悟空' , 
'age':18 , 
'gender':'男' , 
'name':'sunwukong'
}

print(d , type(d))

需要根据键来获取值

print(d['name'],d['age'],d['gender'])

如果使用了字典中不存在的键,会报错

# print(d['hello']) KeyError: 'hello'

字典的使用

创建字典

使用{}

# 语法:{k1:v1,k2:v2,k3:v3}

使用 dict()函数来创建字典
每一个参数都是一个键值对,参数名就是键,参数名就是值(这种方式创建的

字典,key都是字符串)
d = dict(name='孙悟空',age=18,gender='男') 

也可以将一个包含有双值子序列的序列转换为字典

# 双值序列,序列中只有两个值,[1,2] ('a',3) 'ab'
# 子序列,如果序列中的元素也是序列,那么我们就称这个元素为子序列
# [(1,2),(3,5)]
d = dict([('name','孙悟饭'),('age',18)])
# print(d , type(d))
d = dict(name='孙悟空',age=18,gender='男') 

len() 获取字典中键值对的个数

print(len(d))

in 检查字典中是否包含指定的键
not in 检查字典中是否不包含指定的键

print('hello' in d)
获取字典中的值,根据键来获取值
语法:d[key]
print(d['age'])

n = 'name'
print(d[n])

通过[ ]来获取值时,如果键不存在,会抛出异常 KeyError

get(key[, default])

该方法用来根据键来获取字典中的值
如果获取的键在字典中不存在,会返回None
也可以指定一个默认值,来作为第二个参数,这样获取不到值时将会返回默认值

print(d.get('name'))
print(d.get('hello','默认值'))

修改字典

d[key] = value 如果key存在则覆盖,不存在则添加

# d[key] = value 如果key存在则覆盖,不存在则添加
d['name'] = 'sunwukong' # 修改字典的key-value
d['address'] = '花果山' # 向字典中添加key-value

# print(d)

setdefault(key[, default]) 可以用来向字典中添加key-value
如果key已经存在于字典中,则返回key的值,不会对字典做任何操作
如果key不存在,则向字典中添加这个key,并设置value

result = d.setdefault('name','猪八戒')
result = d.setdefault('hello','猪八戒')

print('result =',result)
print(d)

update([other])
将其他的字典中的key-value添加到当前字典中
如果有重复的key,则后边的会替换到当前的

d = {
    
    'a':1,'b':2,'c':3}
d2 = {
    
    'd':4,'e':5,'f':6, 'a':7}
d.update(d2)


print(d)

删除

可以使用 del 来删除字典中的 key-value

del d['a']
del d['b']

popitem()
随机删除字典中的一个键值对,一般都会删除最后一个键值对
删除之后,它会将删除的key-value作为返回值返回
返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value
当使用popitem()删除一个空字典时,会抛出异常 KeyError: ‘popitem(): dictionary is empty’

d.popitem()
result = d.popitem()

pop(key[, default])
根据key删除字典中的key-value
会将被删除的value返回!
如果删除不存在的key,会抛出异常
如果指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值

result = d.pop('d')
result = d.pop('z','这是默认值')

# del d['z'] z不存在,报错

clear()用来清空字典

d.clear()

print('result =',result)
print(d)

copy()
该方法用于对字典进行浅复制
复制以后的对象,和原对象是独立,修改一个不会影响另一个
注意,浅复制会简单复制对象内部的值,如果值也是一个可变对象,这个可变对象不会被复制

d = {
    
    'a':1,'b':2,'c':3}
d2 = d.copy()
# d['a'] = 100

d = {
    
    'a':{
    
    'name':'孙悟空','age':18},'b':2,'c':3}
d2 = d.copy()
d2['a']['name'] = '猪八戒'


print('d = ',d , id(d))
print('d2 = ',d2 , id(d2))

遍历字典

keys()

该方法会返回字典的所有的key
该方法会返回一个序列,序列中保存有字典的所有的键

d = {
    
    'name':'孙悟空','age':18,'gender':'男'}

# 通过遍历keys()来获取所有的键
for k in d.keys() :
    print(k , d[k])
values()

该方法会返回一个序列,序列中保存有字典的左右的值

d = {
    
    'name':'孙悟空','age':18,'gender':'男'}

for v in d.values():
    print(v)
items()

该方法会返回字典中所有的项
它会返回一个序列,序列中包含有双值子序列
双值分别是,字典中的key和value

# print(d.items())
for k,v in d.items() :
    print(k , '=' , v) 

集合(set)

- 集合和列表非常相似
- 不同点:
    1.集合中只能存储不可变对象
    2.集合中存储的对象是无序(不是按照元素的插入顺序保存)
    3.集合中不能出现重复的元素

使用 {} 来创建集合

s = {
    
    10,3,5,1,2,1,2,3,1,1,1,1} # <class 'set'>

集合当中只能存储不可变对象

s = {
    
    [1,2,3],[4,6,7]} TypeError: unhashable type: 'list'

使用 set() 函数来创建集合

s = set() # 空集合

可以通过set()来将序列和字典转换为集合

s = set([1,2,3,4,5,1,1,2,3,4,5])
s = set('hello')
s = set({
    
    'a':1,'b':2,'c':3}) # 使用set()将字典转换为集合时,只会包含字典中的键

创建集合

s = {
    
    'a' , 'b' , 1 , 2 , 3 , 1}

使用in和not in来检查集合中的元素

print('c' in s)

使用len()来获取集合中元素的数量

print(len(s))

add() 向集合中添加元素

s.add(10)
s.add(30)

update() 将一个集合中的元素添加到当前集合中
update()可以传递序列或字典作为参数,字典只会使用键

s2 = set('hello')
s.update(s2)
s.update((10,20,30,40,50))
s.update({
    
    10:'ab',20:'bc',100:'cd',1000:'ef'})

# {1, 2, 3, 100, 40, 'o', 10, 1000, 'a', 'h', 'b', 'l', 20, 50, 'e', 30}

pop()随机删除并返回一个集合中的元素

result = s.pop()

print(result)

remove()删除集合中的指定元素

s.remove(100)
s.remove(1000)

print(s , type(s))

clear()清空集合

s.clear()

print(s , type(s))

copy()对集合进行浅复制

集合的运算

在对集合做运算时,不会影响原来的集合,而是返回一个运算结果

创建两个集合

s = {
    
    1,2,3,4,5}
s2 = {
    
    3,4,5,6,7}
& 交集运算
result = s & s2 # {3, 4, 5}

print('result =',result)
| 并集运算
result = s | s2 # {1,2,3,4,5,6,7}

print('result =',result)
- 差集
result = s - s2 # {1, 2}

print('result =',result)
^ 异或集

获取只在一个集合中出现的元素

result = s ^ s2 # {1, 2, 6, 7}

print('result =',result)
<= 检查一个集合是否是另一个集合的子集

如果a集合中的元素全部都在b集合中出现,那么a集合就是b集合的子集,b集合是a集合超集

a = {
    
    1,2,3}
b = {
    
    1,2,3,4,5}

result = a <= b # True
result = {
    
    1,2,3} <= {
    
    1,2,3} # True
result = {
    
    1,2,3,4,5} <= {
    
    1,2,3} # False

print('result =',result)
< 检查一个集合是否是另一个集合的真子集

如果超集b中含有子集a中所有元素,并且b中还有a中没有的元素,则b就是a的真超集,a是b的真子集

result = {
    
    1,2,3} < {
    
    1,2,3} # False
result = {
    
    1,2,3} < {
    
    1,2,3,4,5} # True
>= 检查一个集合是否是另一个的超集
> 检查一个集合是否是另一个的真超集

猜你喜欢

转载自blog.csdn.net/weixin_51313763/article/details/124517864