Python基础内容训练5(常用的数据类型-----字典)

字典

前面讲到的字符串,列表,元组都是有序的集合

概念:字典是无序的,可变的,键值对集合(key-value组合)

无序的集合无法根据索引来访问

定义方式

  • 方式1 {key:value,key:value}

注意:对于无序的集合,不能用索引来进行访问了

person = {'name':'lw','age':12}
print(person,type(person))
print(person['name'])
print(person['age'])

在这里插入图片描述

  • 方式二:fromkeys(S,v=None)
  • 借用了一个静态方法,类和对象都可以调用
  • 类调用 dict.fromkeys(seq,value) seq是个序列,这个序列就是我们之前讲的有序的集合;value就是key-value中 的value。 就是根据有序序列,把有序序列转换为一个key,后面的value自己设定
d = dict.fromkeys([1,2,3],666)
print(d)

在这里插入图片描述
注意:key不能重复,如果重复了,后面的值会把前面的值覆盖掉;并且key必须是任意不可变类型

d = {'a':1,'b':2,'a':3}
print(d)

在这里插入图片描述
这个不可变类型怎么看呢?比如说列表当作key的时候就会报错,因为list会改变,因为当list增加或者减少的时候,它的id是不变的,而一个变量就是不可变的类型。

id不发生改变的那么这个是可变类型,id发生改变的是不可变类型
在这里插入图片描述
为什么这样呢?是因为字典是采用hash的方式实现的

  • 字典的存储过程:初始化一个表格,用来存放所有的值,这个表格称为哈希表
    在这里插入图片描述
    在存储一个键值对的时候,会作如下操作,根据给定的key,通过某些操作,得到一个在哈希表中的索引位置;根据索引位置,存储给定的值。在这里插入图片描述
    取得过程正好是相反的, 在这里插入图片描述
  • 字典的存在意义:可以通过key查询使得查询更有意义;查询的效率也大大提高

字典的常用操作

  • 字典的常用操作-----增
  • dict【key】=value,当key不存在的时候,即为新增操作
d = {'name':'sz','age':'18'}
print(d,type(d))
d['height'] = 180
print(d)

在这里插入图片描述

  • 字典的常用操作-----删
  • 方式一:del dict【key】,对应的value也会删除哦,因为是捆绑的,并且key必须是存在的
  • 方式二:dict.pop(key【,default】):弹出指定的键值对,并且把这个键值对删除。
    【】里面是可选的,也就是说【】可有可无,如果key不存在,则返回default值
  • 方式三:dict.popitem:删除最后一个键值对,并且以元组的形式返回该键值对;如果字典为空,则会报错
  • 方式四:dict.clear() 删除字典内所有的键值对,返回值是None,字典本身还存在,但是里面的元素不存在了
d = {'name':'sz','age':'18'}
del d['name']
print(d)

d1 = {'name':'sz','age':'18'}
print(d1.pop('age'))
print(d1.pop('sss',6))
print(d1)

d2 = {'name':'sz','age':'18'}
print(d2.popitem(),d2)

d3 = {'name':'sz','age':'18'}
print(d3.clear(),d3)

在这里插入图片描述

  • 字典的常用操作-----改
  • 只能改值,不能改key;修改单个键值对:dict【key】= value;如果key不存在,则新增
  • 批量修改键值对,oldDict.update(newDict);根据新的字典,批量更新旧字典中的键值对,如果旧字典没有对应的key,则新增键值对。
d = {'name':'sz','age':18}
print(d)
d['age']= 24
print(d)

d1 = {'name':'sz','age':18}
print(d1)
d1.update({'age':24,'height':180})
print(d1)

在这里插入图片描述

  • 字典的常用操作-----查
  • 获取单个值:方式1 dict【key】,如果key不存在,则会报错;方式二 dict.get(key,【default】),中括号是可选的,也可以选择不写,返回值是想要查询的key对应的value,如果查询到了,则会返回该value,如果没有查询到则会返回default。方式三 dict.setdefault(key【default】)获取指定key对应的value,如果key不存则会在字典中增加这个key,并且自己设定默认值为None,并且返回None;如果没有设定默认值,则返回None。
#方式1
d = {'name':'sz','age':18}
print(d['age'])

#方式二
d1 = {'name':'sz','age':18}
result = d1.get('name')
result1 = d1.get('height',6)
print(result)
print(result1)

#方式三
d2 = {'name':'sz','age':18}
print(d2)
print(d2.setdefault('name'))
print(d2.setdefault('height',6))
print(d2)

在这里插入图片描述

  • 获取所有的值 dict.values()
  • 获取所有的键 dict.keys()
  • 获取字典的键值对 dict.items()
d = {'name':'sz','age':18}
print(d)
print(d.values())
print(d.keys())
print(d.items())
print('改变后-----------')
d['height'] = 180
print(d)
print(d.values())
print(d.keys())
print(d.items())

在这里插入图片描述

在这里插入图片描述

这里的view objects是什么呢,就是说是一个视图,如果这个字典发生变化的时候这个视图也会跟着发生变化。

  • 遍历操作 方式一:根据所有的key进行遍历;方式二 直接遍历所有的键值对
#方式一
d = {'name':'sz','age':18,'height':180}
keys = d.keys()

for key in keys:
    print(key)
    print(d[key])

在这里插入图片描述

#方式二
d = {'name':'sz','age':18,'height':180}
kvp = d.items()
print(d.items())  #我们可以看到给出的view object是个元组类型

for p in kvp:  #元组的解包操作
    print(p)
for k,v in kvp:
    print(k,v)

在这里插入图片描述

  • 字典的计算和判定操作
  • 计算操作:计算键值对的个数 len(dict)
  • 判定操作 x in dict判定x是在字典中的key中 也可以改成not in
d = {'name':'sz','age':18,'height':180}
print(len(d))

print('name' in d)
print(18 in d)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值