字典的操作总结(基本方法、操作符、内建函数、字典特点、字典推导式)

目录

字典的创建、赋值、访问、修改、添加、删除

创建赋值

访问字典的值

实现遍历访问

修改字典

更新和添加新的键值对

删除字典元素

映射类型操作符

标准类型操作符

映射类型操作符

字典的键查找操作符([])

(键)成员关系操作(in,not in)

映射类型的内建函数和工厂函数

标准类型函数   type()str() sorted()

分类sorted(iterable,key,reverse)

映射类型相关函数 dict()  len() hash()

映射类型内建方法

字典的类型转换 dict()和fromkeys()

清空一个字典clear()

得到一个键对应的值 get(key)  pop()

弹出给定键的值pop()

字典连接函数 update()

复制字典 copy()

键值对视图 items()

键视图 keys()

值视图 values()

字典的键的特点

不允许一个键对应多个值

键必须是可哈希的

字典推导式


字典的创建、赋值、访问、修改、添加、删除

创建赋值

字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下

d = {key1 : value1, key2 : value2, key3 : value3 }

键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。字典的键值可以是任何数据类型,但是键必须是不可变的数据类型,如字符串,数字或者元组,不可以是列表

dict1={'abc':456}
dict2={'abc':123,96.3:37}
print(dict1)
print(dict2)
dict3=dict()#创建空字典
dict4=dict(a='a23',b='b45',c='c78')#传入关键字
dict5=dict(zip(['one','two','three'],[1,2,3])) #映射函数
dict6=dict([('one',1),('two',2),('three',3)])#可迭代对象方式构建字典
print(dict3)
print(dict4)
print(dict5)
print(dict6)

访问字典的值

把相应的键放入熟悉的方括弧,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print(dict['Name'])
print(dict['Age'])

如果用字典里没有的键访问数据,会输出错误如下:

print(dict['Alice'])

实现遍历访问

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
for key in dict:
    print(f'key={key},value={dict[key]}')

修改字典

更新和添加新的键值对

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Name']='Jennifer' #修改
dict['School']='ABCuniversity' #添加
print(dict)

删除字典元素

能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下实例:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del dict['Name'] #删除键是’Name‘的条目
print(dict)
dict.clear()#清空字典的所有条目
print(dict)
del dict

映射类型操作符

标准类型操作符

>,<,<=,>=不支持dict与dict进行比较,==,!=可以判断是否每个key对应的每个value都相等。

映射类型操作符

字典的键查找操作符([])

键查找操作符是唯一仅用于字典类型的操作符,它和序列类型里单一元素的切片(slice)操作符很相象。对序列类型来说,用索引做唯一参数或下标(subscript)以获取一个序列中某个元素的值。对字典类型来说,是用键查询(字典中的元素),所以键是参数( argument),而不是一个索引(index)。键查找操作符既可以用于给字典赋值,也可以用于从字典中取值

d[k]=v 通过键k,给字典中某元素赋值

d[k] 通过键k,查询字典中某元素的值。

(键)成员关系操作(in,not in)

用in 和not in 可以检查某个键是否存在于字典中。

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
if 'Name'in dict:
    print(True)
if 'Namelala' not in dict:
    print(True)

映射类型的内建函数和工厂函数

标准类型函数   type()str() sorted()

对一个字典调用 type工厂方法,会返回字典类型,“< type 'dict>”。调用str()工厂方法将返回该字典的字符串表示形式。

print(type(dict))
print(str(dict))

分类sorted(iterable,key,reverse)

可对键、值、键值对排序

dict = {1:2,3:4,5:6}
key=dict.keys()
print(sorted(key))
value=dict.values()
print(sorted(value))
items=dict.items()
print(sorted(items))

映射类型相关函数 dict()  len() hash()

dict()工厂函数被用来创建字典。如果不提供参数,会生成空字典。当容器类型对象作为一个参数传递给方法dict()时很有意思。如果参数是可以迭代的,即一个序列,或是一个迭代器,或是一个支持迭代的对象,那每个可迭代的元素必须成对出现。在每个值对中,第1个元素是字典的键,第2个元素是字典中的值。

dict3=dict()#创建空字典
dict4=dict(a='a23',b='b45',c='c78')#传入关键字
dict5=dict(zip(['one','two','three'],[1,2,3])) #映射函数
dict6=dict([('one',1),('two',2),('three',3)])#可迭代对象方式构建字典
dict7=dict([('xy'[i-1],i)for i in range(1,3)])#可迭代对象方式构建字典
print(dict3)
print(dict4)
print(dict5)
print(dict6)
print(dict7)

对字典调用len()函数,返回字典中键值对的数目

内建函数 hash()本身并不是为字典设计的方法,但它可以判断某个对象是否可以做一个字典的键

将一个对象作为参数传递给 hash(),会返回这个对象的哈希值。只有这个对象是可哈希的,才可作为字典的键(函数的返回值是整型,不产生错误或异常)。

如果用比较操作符来比较两个数值,发现它们是相等的,那么即使二者的数据类型不同,它们也会得到相同的哈希值。

如果非可哈希类型作为参数传递给 hash()方法,会产生 Type Error错误(因此,如果使用这样的对象作为键给字典赋值时会出错)。

hash([])

hash('acb')

映射类型内建方法

字典的类型转换 dict()和fromkeys()

转换1: dict()工厂函数被用来创建字典。如果不提供参数,会生成空字典。当容器类型对象作为一个参数传递给方法dict()时很有意思。如果参数是可以迭代的,即一个序列,或是一个迭代器,或是一个支持迭代的对象,那每个可迭代的元素必须成对出现。在每个值对中,第1个元素是字典的键,第2个元素是字典中的值。

dict3=dict()#创建空字典
dict4=dict(a='a23',b='b45',c='c78')#传入关键字
dict5=dict(zip(['one','two','three'],[1,2,3])) #映射函数
dict6=dict([('one',1),('two',2),('three',3)])#可迭代对象方式构建字典
dict7=dict([('xy'[i-1],i)for i in range(1,3)])#可迭代对象方式构建字典
print(dict3)
print(dict4)
print(dict5)
print(dict6)
print(dict7)

转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中

print({}.fromkeys(('name','age','sex'),None))

清空一个字典clear()

可以清空一个字典,还有一种方式是直接给变量赋值为一个空的字典。

直接给变量名赋值为一个空字典并没有改变原来的字典,只是重新分配了一个新的字典给a。

a={'b':1,'c':2}
e=a
print(e)
a={}
print(a)
print(e)

a={'b':1,'c':2}
e=a
print(e)
a.clear() #清空的是字典本身
print(a)
print(e)

得到一个键对应的值 get(key)  pop()

get(key[,default]) 获得给定键的值,当键不存在时返回None。

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
print(dict.get("Name"))
print(dict.get('School'))

弹出给定键的值pop()

如果字典中key关键字,删除并返回dict[key],如果键不存在,报错KeyError。

setdefault(key,default)  检查字典中是否存在某键。存在则返回,不存在添加且设置默认值

当字典中存在给定的键时,返回该键对应的值;如果该键不存在,则添加给定的键,对应值为None。

字典连接函数 update()

update函数可以将两个字典连接起来,但是如果第二个字典和第一个字典有相同键,那么第一个字典会被更新。

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}

dict2={'sex':'male','School':'abcuniversity2','Class':3}
dict.update(dict2)
print(dict)

复制字典 copy()

copy方法返回一个字典的副本,浅拷贝。

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict2=dict.copy()
print(dict2)

键值对视图 items()

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
item=dict.items()
print(type(item))
print(item)

键视图 keys()

本身类型是‘dict_keys’,按需要强制转化成列表等数据结构

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
key=dict.keys()
print(type(key))
print(key)

值视图 values()

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
value=dict.values()
print(type(value))
print(value)

前面三个返回的都是视图对象。该对象提供字典条目的一个动态视图,这意味着当字典改变时,视图也会相应改变。 大多数情况下我们希望得到的是列表,可以使用list()进行转换,对于keys()来说,list(d)与list(d.keys())是一样的。

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
value=dict.values()
print(value)
dict['Name']='YuBo'
print(type(value))
print(value)

字典的键的特点

字典中的值没有任何限制。他们可以是任意Python对象,即从标准对象到用户自定义对象皆可。但是字典的键是有类型限制的。

不允许一个键对应多个值

每个键只能对应一个项。也就是说,一键对应多个值是不允许的(像列表、元组和其他字典这样的容器对象是可以的)。当有键发生冲突(即字典键重复赋值),取最后(最近)的赋值

键必须是可哈希的

为什么键必须是可哈希的?解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,它的值可改变。如果键发生变化,哈希函数会映像到不同的地址来存储数据。如果这样的情况发生,哈希函数就不可能可靠地存储或获取相关的数据。选择可哈希的键的原因就是因为它们的值不能改变。

字典推导式

{key: value for (key, value) in iterable}

d1 = {key: value for (key, value) in zip('0123456789', range(10))}
d2 = dict(zip('0123456789', range(10)))
print(d1)
print(d2)
d3={key:value for (key,value) in ((1,2),(3,4),(5,6))}
# d4={key:value for (key,value) in 1=2,3=4,5=6} #不可以
d4=dict(a='a23',b='b45',c='c78')#传入关键字
d5=dict(zip(['one','two','three'],[1,2,3])) #映射函数
print(d3)
print(d4)
print(d5)

更多Python框架梳理,请参考: 【Python学习】Python最全总结

 有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值