2024.1.23 Python学习笔记9(字典)

字典创建

字典创建有多种方法:

x = {"张三":3,"李四":4,"王五":5}
#直接建立映射后赋值给变量
y=dict(张三=3,李四=4,王五=5)
#使用dict函数建立字典
#注意其中张三两边不能加引号作为字符串
z=dict([('张三',3),('李四',4),('王五',5)])
#使用列表创建字典,列表元素为二元元组,分别是关键字与值
a=dict({"张三":3,"李四":4,"王五":5})
#实际该方法步骤较为多余,dict参数此时已经是字典
b=dict({"张三":3,"李四":4},王五=5)
#混合方法
c=dict(zip(['张三','李四','王五'],[3,4,5]))
#zip函数返回一个可迭代对象,此时可以应用于dict函数参数
#以上内容均生成字典{"张三":3,"李四":4,"王五":5}

字典增删改查

1. dict.fromkeys(iterable,value):创建一个以可迭代对象iterable元素为键、所有键值为value的字典。

a=dict.fromkeys('12345',0) #以'12345'中各个元素为键,值均为0
print(a)
#{'1': 0, '2': 0, '3': 0, '4': 0, '5': 0}

2. 修改键值对,例如对于字典dict_,可通过dict_[key]=value语法处理。当字典中存在键为key时,将其值改为value;若不存在,则在字典中添加键值对key=>value。

a={"1":0,"2":0,"3":0}
a["1"]=1    #a中存在键'1',对其值修改
a['4']=0    #a中不存在键'4',添加并赋其值为0
print(a)
#{'1': 1, '2': 0, '3': 0, '4': 0}

3. pop(key[,default]):删除字典中键为key的键值对,返回键值对值;若存在default参数,则在key本身不存在于字典中时,返回default参数,否则异常。

a={"1":0,"2":0,"3":0}
print(a,a.pop('1','error'))
#a中存在键为'1'的键值对,删除,返回其值0
print(a,a.pop('5','error'))
#a中不存在键为'5'的键值对,返回default参数'error'
'''
{'2': 0, '3': 0} 0
{'2': 0, '3': 0} error
'''

Python3.7版本中,字典同样更新为有序对象,popitem方法可以删除字典中最后一个键值对并返回其值。 

del dict[key]同样可以实现删除字典dict中的key对应键值对,而del dict则直接将字典dict删除。如果想要保留dict,只是清空字典得到空字典,则可以借助于clear方法。

d=dict.fromkeys('12345',0)
del d['1']  #删除字典中key='1'的键值对
print(d)
#{'2': 0, '3': 0, '4': 0, '5': 0}
d.clear()
print(d)
#清空字典,输出{}
del d
print(d)
#del d已经删除变量d,此时会报错NameError: name 'd' is not defined

4. 当需要对字典中多个键值对操作时,需要使用update方法,对多个键值对进行修改。同样,希望修改的键值对,如果在原字典中存在该键,则会修改值,反之增加该键值对。

d=dict.fromkeys('abcde',0)
d.update({'a':10,'b':20,'f':60})#修改'a'、'b'值,增加键值对'f'=>60
print(d)    #{'a': 10, 'b': 20, 'c': 0, 'd': 0, 'e': 0, 'f': 60}
d.update(a=100,g=700)#修改'a'值,增加键值对'g'=>700
print(d)    #{'a': 100, 'b': 20, 'c': 0, 'd': 0, 'e': 0, 'f': 60, 'g': 700}

 5. 查找键值对,例如上面d=dict.fromkeys('abcde',0),可以使用基本的d['a']查找,但如果查找内容不在字典之中,那么会有异常。使用get方法,设置其中default参数,可以在查找失败时返回提示结果。

此外,setdefault方法可以一步实现以下功能:查找键是否存在字典中,如果存在则返回键值;如果不存在,则创建该键,键值为default参数设置。

d=dict.fromkeys('abcde',0)
print(d.get('a','error'),d.get('f','error'))#0 error
print(d)
#{'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0}
#字典中键值对未发生更新
print(d.setdefault('a','error'),d.setdefault('f','error'))#0 error
print(d)
#{'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 'error'}
#字典中键值对发生了更新

6. 通过items、keys、values方法,分别可以获得字典键值对、键、值的视图对象,字典更新时,视图对象内容同样会发生更新。视图对象可以用于进行字典的遍历,遍历方法在笔记3中有过提及。

d=dict.fromkeys('abcde',0)
items=d.items()
keys=d.keys()
values=d.values()
print('',items,'\n',keys,'\n',values)
'''
 dict_items([('a', 0), ('b', 0), ('c', 0), ('d', 0), ('e', 0)]) 
 dict_keys(['a', 'b', 'c', 'd', 'e']) 
 dict_values([0, 0, 0, 0, 0])
'''
del d['a']
print('',items,'\n',keys,'\n',values)#字典发生变化,视图对象同样发生变化
'''
 dict_items([('b', 0), ('c', 0), ('d', 0), ('e', 0)]) 
 dict_keys(['b', 'c', 'd', 'e']) 
 dict_values([0, 0, 0, 0])
'''

字典推导式

字典同样可以类似列表推导式,使用字典推导式快速获得。

d= {x:y for x,y in zip('12345',[1,2,3,4,5])}
print(d)
#{'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}
c={x:y for y,x in d.items()}
print(c)
#{1: '1', 2: '2', 3: '3', 4: '4', 5: '5'}
b={x:ord(x) for x in 'Python'}
print(b)
#{'P': 80, 'y': 121, 't': 116, 'h': 104, 'o': 111, 'n': 110}
a={x:y for x in range(3) for y in range(3)}
print(a)
#{0: 2, 1: 2, 2: 2}
#这种循环结果是[0,1,2]与[0,1,2]的笛卡尔积,但是由于字典中键不重复,
#后面生成的键值对会将原有的相同键键值对更新覆盖,
#最终只会留下以上键值对

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值