字典合并的那些事

闲聊一句

因为看到别人在代码里自行写了个合并字典的方法,于是决定来写个文章记录下自己所想

正题

对于字典合并这个事,你最先想到的是什么呢?
对于字典合并,要求存在相同的键时,不更新掉值,你最先想到的又是什么呢?

你可以先想下,然后再继续看下去。

因为需要,运行代码均加了时间计算。
时间计算因为各种原因,会有差别。
*注:time.lock()在python3.8已经不用了。

update

这个是很常用的方法

d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d1.update(d2)

在这里插入图片描述

字典构造器-关键字参数

需字典的键是字符串才可用,否则会报TypeError: keywords must be strings。

d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d=dict(d1, **d2)

在这里插入图片描述

推导式

d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d={k: v for d in [d1, d2] for k, v in d.items()}

在这里插入图片描述

元素拼接

d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d=dict(list(d1.items())+list(d2.items()))

在这里插入图片描述

chain

from itertools import chain
d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d=dict(chain(d1.items(), d2.items()))

在这里插入图片描述

ChainMap

from collections import ChainMap
d1={'a':1,'b':2,'c':3}
d2={'d':4,'b':5,'e':6}
d=dict(ChainMap(d1, d2))

在这里插入图片描述

写for(别人写的)

d1 = {'a': 1, 'b': 2, 'c': 3}
d2 = {'d': 4, 'b': 5, 'e': 6}
keys_1 = d1.keys()
keys_2 = d2.keys()
list_keys = list(keys_1) + list(keys_2)
dict_3 = {}
for i in list_keys:
    if i in list(keys_1):
        dict_3[i] = d1[i]
    elif i in list(keys_2):
        dict_3[i] = d2[i]

在这里插入图片描述

总结

对于简单的字典:

方式示例时间说明
updated1.update(d2)1.09999999997612e-06直接更新掉d1。对于同名的键会覆盖
字典构造器-关键字参数d=dict(d1, **d2)1.6999999999933735e-06会合并到一个新的字典,d1、d2均保留原值。对于同名的键会覆盖。键名需为string类型。
推导式d={k: v for d in [d1, d2] for k, v in d.items()}1.8399999999973993e-05会合并到一个新的字典,d1、d2均保留原值。对于同名的键会覆盖。
元素拼接d=dict(list(d1.items())+list(d2.items()))3.700000000050885e-06会合并到一个新的字典,d1、d2均保留原值。对于同名的键会覆盖。
chaind=dict(chain(d1.items(), d2.items()))3.3000000000393825e-06会合并到一个新的字典,d1、d2均保留原值。对于同名的键会覆盖。
ChainMapd=dict(ChainMap(d1, d2))0.0015589000000000297会合并到一个新的字典,d1、d2均保留原值。对于同名的键不会覆盖。
写for8.499999999966867e-06

时间由小到大排序为:[‘update’, ‘字典构造器-关键字参数’, ‘chain’, ‘元素拼接’, ‘自己写for’, ‘推导式’, ‘ChainMap’]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值