python 字典update()函数-----如果多个字典key值相同如何合并?

本文介绍了Python字典的update()函数,用于合并字典。当key相同,dict2的值会覆盖dict1。若希望key相同时合并value,可以使用setdefault()方法将value转为列表并合并。通过示例代码展示了如何实现这一功能,并将其封装成函数,方便多次合并操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        今天在学习python的过程中了解 到一个python内置函数update(),这是一个用于合并的字典的函数,用法是dict1.update(dict2),意思是把dict2添加到dict1里面去。

来看一下菜鸟教程对此函数的解释,如下图:

        第一点需要注意的是,是哪个字典添加到哪个字典!当然,如果key值不同,那么理所当然的是合并俩个字典;但如果key值相同,那么key值相同的部分dict2就会覆盖dict1(----dict1.update(dict2)----)。

        第二点需要注意的是,这个函数是没有返回值的(也就是返回none,是一个意思)!有些初学者可能不明白什么叫没有返回值。举个例子,我先定义好字典dict1和dict2之后,用一个变量dict3 = dict1.update(dict2),你打印这个dict3你会发现你得到的是个none。

下面用一段代码来演示一下以上两点:

        那么现在我没需要思考一个问题,既然update()函数在key相同的情况下是做的更新操作,那如果我没想要在key值相同的情况下也要让他们合并该怎么办呢?

        首先,key值相同时如果我们要把多个字典的对应value值合并在一起,那value肯定得用列表来表示了,比如{'key1' : [1,2,3,4], 'key2' : 2}里面的key1这种形式,所以我们要把key相同时对应的value值的类型弄成列表的类型。如何弄?我这里利用了setdefault()这个方法。下面先简单讲一讲这个setdefault()的用法。

        首先setdefault()是字典中的一个方法,setdefault(key,default),default是一个设定的默认值,可以是任意类型。如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于字典中,将读出该键原来对应的值,default的值不会覆盖原来已经存在的键的值。

嗯,该了解的都了解了,下面开始正片:

        可以看到我已经成功的将dict1添加到dict4里面,并且key1,key2对应的值都是列表类型,我们只需要再做一次循环把dict2添加进去就行,这样代码太长了奥,把它写成函数把,这样如果多个字典合并就不用一个个的去写for循环了!

dict1 = {'key1' : 1,'key2' : 2,'key3' : 7}
dict2 = {'key1' : 3,'key2' : 9,'key4' : 10}
#dict4用来存储合并后的字典
dict4 = {}
#求出俩个字典不相同的key集合,下面是做的集合的运算,不清楚的百度一下
not_common_keys = (dict1.keys() | dict2.keys()) - (dict1.keys() & dict2.keys())
print(not_common_keys)
print('------------分割线-----------')
#**表示传入键值对
def main(**dict3):
    for key in dict3.keys():
        if key in not_common_keys:
            dict4[key] = dict3[key]
        else:
            dict4.setdefault(key, []).append(dict3[key])
main(**dict1)
main(**dict2)
print(dict4)

得到了想要的效果!

有什么不对的地方欢迎大家留言或私信斧正!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值