有没有提供dict merge的简单python包?
我想这样做:有没有提供dict merge的简单python包?,python,python-2.7,Python,Python 2.7,我想这样做: merge({'a': 1}, {'b': 2}) 并返回{'a':1,'b':2} 我不想使用.update(),遗憾的是,它不会返回更新的或新的dict,只是None(为什么?…) 因为我知道.update(),所以我可以为此编写一个3行函数。我不需要,我只想要一个已经存在/已知的包,以简单的方式完成这类工作 编辑 此编辑只是为了向用户解释这些问题,这样用户就不会重复这些问题,因此选择的答案与候选答案副本中提供的任何答案都不相关。该软件包可以合并词典 从Python 3.5开
merge({'a': 1}, {'b': 2})
并返回{'a':1,'b':2}
.update()
,遗憾的是,它不会返回更新的或新的dict
,只是None
(为什么?…).update()
,所以我可以为此编写一个3行函数。我不需要,我只想要一个已经存在/已知的包,以简单的方式完成这类工作>>> d1 = {'a': 1}
>>> d2 = {'b': 2}
>>> {**d1, **d2}
{'b': 2, 'a': 1}
正如ShadowRanger在评论中指出的那样,只有当d2的所有键都是str类型时,这才有效。在Python 2.7中,您可以使用一行(忽略导入)合并:
from itertools import chain
merged = dict(chain(dict1.viewitems(), dict2.viewitems()))
在Py3.5及更高版本中,您可以使用:
之所以
dict.update
返回None
,是因为Python方法作为一般规则,坚持要么改变现有对象,要么返回新对象,而不是两者兼而有之。基本上,有副作用的函数不应该以功能性的方式使用(因为它容易混淆)。否决,检查原因:只有当d2
有纯str
键时,这才是合法的;否则,滥用关键字参数解包是不合法的。@ShadowRanger是的,对你的评论进行了投票,让人们看到它@亚历克斯的评论是短暂的。如果你真的想突出显示它,请将它添加到你的答案中。可能是重复的而不是重复的。这一个要求提供这样的包,因为它不是Python2的原生版本。应聘者不是在寻找这个方面,也不是在提供这个意义上的答案。@pepper_chico。所以你的问题实际上是,既然你要求人们推荐一个软件库,你想为此引入一个依赖项吗?@user2357112是的!!,这一举动清楚地表明了这种语言有多好。你知道这个软件包是否没有出现如中所述的性能下降问题吗?@pepper_chico:我没有测量它,但它不会产生不必要的副本(实现也相当短):我意识到为什么,“为什么”更像是复述而不是真实的。依我看,这只是为了不让新手感到困惑,以牺牲可用性为代价,因此“…”。
from itertools import chain
merged = dict(chain(dict1.viewitems(), dict2.viewitems()))
merged = {**dict1, **dict2}