前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何快速合并两个字典

如何快速合并两个字典

作者头像
企鹅号小编
发布2018-02-27 09:52:08
2K0
发布2018-02-27 09:52:08
举报
文章被收录于专栏:编程编程

现在有两个字典:

x = {'a':1,'b':2}y = {'b':10,'c':11}

如何将这两个字典合并成一个新的字典z,有看过我之前写的文章可能会知道使用,一个接受多个字典并将它们在逻辑上变为一个字典。为什么说在逻辑上?因为类只是在内部创建了一个容纳这些字典的列表,并重新定义了一些常见的字典操作来遍历这个列表,并没有真正的创建字典。

fromcollectionsimportChainMapz = ChainMap(x, y)print(z)

# 字典的常用操作不变

print(list(z.values()))print(list(z.keys()))

ChainMap({‘a’: 20, ‘b’: 2}, {‘b’: 10, ‘c’: 11})

[11, 20, 2]

[‘c’, ‘a’, ‘b’]

如果字典中有相同的键,默认使用第一个字典中的键值,比如上面的x和y中都有键,那么z中的键b的值为2。

print(z['b'])

2

如果我们更新z中的键值,会发生什么。

z['a'] =20

print(x)

{‘a’: 20, ‘b’: 2}

可以看到,改变z中键的值,合并前字典中的值也会改变。反过来亦可以。

除了上面说的ChainMap方法外,有没有其他更简便的方法?或者我希望当两个字典中的键一样时,默认使用第二个字典中的值呢?

如果使用的python版本是3.5以上的话,有一个很简便的方法合并两个字典:

z = {**x, **y}print(z)

{‘a’: 20, ‘b’: 10, ‘c’: 11}

amazing!

如果你的python版本低于3.5呢,或是项目中使用的是更低版本的python,怎么做。

defmerge_two_dicts(x, y):

# 做一份潜复制

z = x.copy()

# 更新z中的键值

z.update(y)

returnzz = merge_two_dicts(x, y)print(z)

{‘a’: 20, ‘b’: 10, ‘c’: 11}

在上面的函数中,使用update方法将两个字典合并。当然了,如果要合并多个字典也是可以的,把原来的代码大概修改一下:

defmerge_dicts(*dict_args):

result = {}

fordictionaryindict_args: result.update(dictionary)

returnresult

使用可变参数传入多个字典。

不过,需要注意的是,除了ChainMap方法外,另外两种方法在字典中的键相同时,默认使用最后一个字典中的值,而且改变原来字典的键值不会影响到合并之后的结果,反之亦然。因为这两种操作都是生成了一个新的字典类型。

x = {'a':1,'b':2}y = {'b':10,'c':11}z = merge_dicts(x, y)print(z)x['a'] =20print(x)print(z)z_ = {**x, **y}print(z_)x['a'] =30print(z_)

{‘a’: 1, ‘b’: 10, ‘c’: 11}

{‘a’: 20, ‘b’: 2}

{‘a’: 1, ‘b’: 10, ‘c’: 11}

{‘a’: 20, ‘b’: 10, ‘c’: 11}

{‘a’: 20, ‘b’: 10, ‘c’: 11}

有什么问题,可以在下面留言哈。

本文来自企鹅号 - 码上就来媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 码上就来媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档