Python基础知识_day4_字典和集合

1. 字典

1.1 字典的创建

  • dict函数创建
dic = dict(name='alex',age=18)
print(dic) #{'name': 'alex', 'age': 18}
  • 通过zip()内置函数创建
k = ['name','age','job']
v = ['alex',18,'teacher']
dic = dict(zip(k,v))
print(dic) #{'name': 'alex', 'age': 18, 'job': 'teacher'}
  • dict.fromkeys 方法创建
dic = dict.fromkeys("123",[23]) # 批量添加键值对{"1":[23],"2":[23],"3":[23]}
print(dic) #{'1': [23], '2': [23], '3': [23]}

1.2 字典元素的访问

1.2.1 通过“键”获得“值”

  • [‘键’] 方式,键不存在时报错
dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}
print(dic['name']) #alex
  • .get 方式,键不存在时返回None,也可以设定返回值
dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}
print(dic.get('name')) #alex
print(dic.get('address')) #None
print(dic.get('address','不存在')) #不存在

1.2.2 列出所有的键值对

  • items()
dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}

print(dic.items())
#dict_items([('name', 'alex'), ('age', 18), ('job', 'teacher')])
#数据类型为<class 'dict_items'>
#结果为一个高仿列表,不支持索引,支持for循环和list转化

print(list(dic.items()))
# [('name', 'alex'), ('age', 18), ('job', 'teacher')]

for i in dic.items():
    print(i[0],i[1])
# name alex
# age 18
# job teacher

1.2.3 列出所有的值

  • values()
dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}

print(dic.values())
#与 itmes 一样,结果为一个高仿列表,不支持索引,支持for循环和list转化

print(list(dic.values()))
# ['alex', 18, 'teacher']

for i in dic.values():
    print(i)
# alex
# 18
# teacher

1.2.4 列出所有的键

  • keys()
dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}

print(dic.keys())
#与 itmes 一样,结果为一个高仿列表,不支持索引,支持for循环和list转化

print(list(dic.keys()))
# ['name', 'age', 'job']

for i in dic.keys():
    print(i)
# name
# age
# job

1.3 字典元素添加、修改、删除

1.3.1 字典元素添加和修改

  • 直接添加 dic[‘键’] = ‘值’

键不存在,添加;键存在,覆盖

dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}

dic['address'] = 'Peking' #键不存在,添加
print(dic)
# {'name': 'alex', 'age': 18, 'job': 'teacher', 'address': 'Peking'}

dic['address'] = 'Shanghai' #键存在,修改
print(dic) 
# {'name': 'alex', 'age': 18, 'job': 'teacher', 'address': 'Shanghai'}
  • update() 更新

将新字典中所有键值对全部添加到旧字典上,如果key有重复,则直接覆盖

dic = {'name': 'alex', 'age': 18, 'job': 'teacher'}

dic.update({'address':'SHANGHAI','age':23})
print(dic)
# {'name': 'alex', 'age': 23, 'job': 'teacher', 'address': 'SHANGHAI'}

1.3.2 字典元素删除

del, pop, popitem, clear

dic = {'name': 'alex', 'age': 18, 'job':'teacher','address':'Peking', 'hobby':'music'}

del dic['name']
print(dic)
# {'age': 18, 'job': 'teacher', 'address': 'Peking', 'hobby': 'music'}

a = dic.pop('age') #有返回值
print(a) #18,为该'键'下的'值'
print(dic)
# {'job': 'teacher', 'address': 'Peking', 'hobby': 'music'}

b = dic.popitem() #返回最后一个键值对,以元组的形式
print(b) #('hobby', 'music')
print(dic) 
# {'job': 'teacher', 'address': 'Peking'}

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

1.4 字典解构

dic1 = {"1":"a","2":"b"}
a,b = dic1
print(a) #1
print(b) #2

for i in dic1.items():   #i为高仿列表里的元组
    print(i)
# ('1', 'a')
# ('2', 'b')

for k,v in dic1.items():    #此步骤相当于对高仿列表里的元组进行解构
    print(k,v)    # 获取每个元素的键和值
# 1 a
# 2 b

1.5 字典核心底层原理

字典对象的核心是散列表(也叫哈希表,是根据Key而直接进行访问的数据结构)。散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket,每个bucket含有两部分:一个是键对象的引用,一个是值对象的引用。

由于,所有bucket结构和大小一致,我们可以通过偏移量来读取指定bucket。

  • 数据存储

在这里插入图片描述

  • 扩容

python会根据散列表的拥挤程度扩容。扩容指的是:创造更大的数组,将原有内容拷贝到新数组中。当已占用的稀疏数组接近2/3时,数组就会扩容。

往字典里添加新"键"可能导致扩容,导致散列表中键的次序变化。因此,不要在遍历字典的同时进行字典的修改。

  • 数据读取

在这里插入图片描述

2. 集合

集合的底层是字典,只不过集合里面是字典的”键“对象,集合里的元素不可重复

2.1 增加原素

  • add
s = {1,2,3,4}
s.add("67")  #只能添加一个
print(s) #{1, 2, 3, 4, '67'}

2.2 删除

  • remove,pop, clear
s = {1,2,3,4}
s.remove(3)     # 指定元素删除
print(s) #{1, 2, 4}

s = {1,2,3,4}
print(s.pop())  # pop随机删除一个元素,并非默认删除最后一个,有返回值
print(s)
s = {1,2,3,4}
s.clear()
print(s) #set() 空集合

2.3 集合其他操作

s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,1}
print(s1 & s2)  # 交集
print(s1 | s2)  # 并集
print(s1 - s2)  # 差集
print(s1 ^ s2)  # 反交集
print(s1 > s2)  # 父集(超集)
print(s1 < s2)  # 子集
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值