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

        今天在学习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)

得到了想要的效果!

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

猜你喜欢

转载自blog.csdn.net/qq_54381110/article/details/124700760