【速通Python】Day 5【字典 可变序列 键值对 无序 哈希函数 花括号创建 dict() [key]取值 get(key)取值 key的判断 增删改 字典视图 遍历 字典生成式 zip()】

字典

  • Python内置的数据结构之一,与列表一样本身是一个可变序列(这个数据结构本身可以执行增删改的操作)
  • 以键值对的方式存储数据,字典是一个无序的序列 (列表是一个有序的序列)

冒号之前的为键,冒号之后的为值,元素之间依旧由逗号分隔

hash(key4) hash(key2) hash(key1) …

我们在往字典当中存储数据的时候,是要经过一个哈希函数的工序 hash(key)计算存储位置
所以要求放在字典中的键必须是一个不可变序列(整数序列,字符串str, 键不可以进行增删改操作),避免产生不确定性因素

堆中的内存空间

  • 字典的实现原理:生活中查字典,是根据一些特性查找相应的页码
    Python 中的字典则是根据key 查找value所在的位置通过hash(key)对键进行计算,因此查找效率很高

字典的创建

  • 快捷方式:直接使用花括号
  • 使用内置函数dict(),之后自动匹配
"""字典的创建方式"""
scores = {'张三': 100, '李四': 98, '王五': 45}
print(scores, type(scores))

student = dict(name='jack', age=20)
print(student)  # {'name': 'jack', 'age': 20} 自动匹配为键值对的形式

d = {}
print(d)  # 空字典

字典的常用操作

字典元素的获取

  • []取值与使用get()取值的区别
    • []如果字典中不存在指定的key, 则抛出 keyError 异常
    • 使用字典的get()方法取值,如果字典中不存在指定的key, 并不会抛出 KeyError 而是返回None,还可以通过参数设置默认的value, 以便指定的 Key不存在时返回
"""获取字典中的元素"""
scores = {'张三': 100, '李四': 98, '王五': 45}

print(scores['张三'])
# print(scores['陈六'])  # KeyError: '陈六'

print(scores.get('张三'))
print((scores.get('陈六')))  # None
print(scores.get('麻七', 99))  # 99是在查找'麻七'所对的value不存在时提供的一个默认值

key的判断
in: 指定的key在字典中存在返回 True, 不存在返回False
not in:指定的key在字典中不存在返回 True, 存在返回False

字典元素的删除

del scores['zhangsan']

字典元素的新增

scores['Jack'] = 90
scores = {'zhangsan':100, 'lisi':98, 'wangwu':45}
print('zhangsan' in scores)  # True
print('zhangsan' not in scores) # False

del scores['zhangsan']  # 删除指定的键值对  一删就是删一对
print(scores)  # 直接打印字典 {'lisi': 98, 'wangwu': 45}

scores.clear()  # 清空字典中的所有元素
print(scores)  # {}

scores['chenliu'] = 98  # 新增元素
print(scores)

scores['chenliu'] = 100  # 修改元素
print(scores)

获取字典视图的三个方法

  1. keys() 获取字典中的所有key
  2. values() 获取字典中的所有value
  3. items() 获取字典中的所有key, value对
scores = {'zhangsan': 100, 'lisi': 98, 'wangwu': 45}
# 获取所有的key
keys = scores.keys()
print(keys)
print(type(keys))  # <class 'dict_keys'>  类型是 字典的键
print(list(keys))  # 将所有键组成的视图转成列表

print('----------------------')
# 获取所有的值
values = scores.values()
print(values, type(values))  # <class 'dict_values'> 类型是字典的值
print(list(values))  # 同样使用list()函数转换为列表

print('-----------------------')
# 获取所有的key-value对
items = scores.items()
print(items, type(items))
print(list(items))  # 元组()的列表[]

字典元素的遍历

for item in scores:
    print(item)

字典的特点

  • 字典当中的所有元素都是键值对key不允许重复(会发生覆盖),value可以重复
  • 字典中的元素是无序的(无法指定插入),根据键去计算值所存在的位置
  • 字典中的key必须是不可变对象(整数,字符串…)(列表就不能做键
  • 字典和列表一样是可以根据需要动态伸缩的(不需要为之分配空间)
  • 字典会浪费较大的内存是一种使用空间换时间的数据结构(空间间隙很多,但查找很快)

字典生成式

  • 内置函数zip()
    • 用于将可迭代(循环遍历)的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
  • 字典生成式
{ item.upper() : price for item, price in zip(items, prices)}
'''
item.upper(): 表示字典key的表达式
price: 表示字典value的表达式
item: 自定义表示value的变量
price:自定义表示value的变量
zip(items, prices):可迭代的对象(可以使用for -in循环遍历的对象)
'''
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 85, 100, 110]

d = {item.upper(): price for item, price in zip(items, prices)}  # zip()打包的时候会以元素少的为基准来生成
print(d)  # {'FRUITS': 96, 'BOOKS': 78, 'OTHERS': 85}

常用的操作:增删改,判断和遍历

新增和修改都是通过等号赋值的形式将值赋给指定的键

可以使用 in 和 not in 来判断指定的键在字典中是否存在

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zanebla

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

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

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

打赏作者

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

抵扣说明:

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

余额充值