我有两个字典,我想将它们合成一个:
希望能够实现类似以下伪代码的Python代码:
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
ndic = dic0 + dic1
# ndic would equal {'dic0': 0, 'dic1': 1}
我有两个字典,我想将它们合成一个:
希望能够实现类似以下伪代码的Python代码:
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
ndic = dic0 + dic1
# ndic would equal {'dic0': 0, 'dic1': 1}
如果您有兴趣创建一个新字典而不使用中介存储:(这比使用dict.items()
更快,更干净,是我的看法)
dic2 = dict(dic0, **dic1)
或者如果你愿意使用现有的字典之一:
dic0.update(dic1)
+
的问题在于冲突的情况下会发生什么?.update()
是正确的非对称方式。 - Nikana Reklawyks这里有很多种方法来添加字典。
你可以使用Python3的字典解包特性:
ndic = {**dic0, **dic1}
请注意,在重复的情况下,将使用后面参数中的值。其他示例也是如此。
或者通过添加这两个项来创建一个新字典。
ndic = dict(tuple(dic0.items()) + tuple(dic1.items()))
如果修改 dic0
是可以的:
dic0.update(dic1)
如果修改dic0
不可以,请执行以下操作:
ndic = dic0.copy()
ndic.update(dic1)
如果确保一个字典中的所有键都是字符串(在这种情况下是dic1
,当然参数可以交换)ndic = dict(dic0, **dic1)
在某些情况下,使用字典推导式(Python 2.7或更新版本)可能会很方便,特别是如果您想同时过滤或转换一些键/值。
ndic = {k: v for d in (dic0, dic1) for k, v in d.items()}
>>> dic0 = {'dic0':0}
>>> dic1 = {'dic1':1}
>>> ndic = dict(list(dic0.items()) + list(dic1.items()))
>>> ndic
{'dic0': 0, 'dic1': 1}
>>>
ndic = list(dict(dic0.items()) + list(dic1.items()))
пјҢеӣ дёә.items()
дёҚеҶҚиҝ”еӣһеҲ—иЎЁпјҢиҖҢжҳҜдёҖдёӘпјҲеҸҜиҝӯд»Јпјүи§ҶеӣҫгҖӮ - Bryce Guintandic=dict(list(dic0.items()) + list(dic1.items()))
。 - dimo414collections
中的ChainMap通过dict(ChainMap(dic1, dic0))
实现此功能。但是,我不得不从chainmap pypi包中获取Python2.7的源代码。请注意,我已经交换了字典的顺序。在Vijay的示例中,最右边的键值会覆盖最左边的键值,而ChainMap则正确地获取最左边的键值,并具有优先权。 - Bryce Guintadic0.update( dic1 )
print( dic0 )
提供
{'dic0': 0, 'dic1': 1}
dic0.update(dic1)
请注意,这并不会返回合并后的字典,它只是改变了dic0
的值。
dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
dic2 = dict(dic0.items() + dic1.items())
我在IDLE上测试过,它可以正常工作。 然而,关于这个主题的前一个问题指出,这种方法很慢并且会消耗内存。那里推荐了几种其他的方式,因此如果内存使用很重要,请参见该方法。
dict(dic0.items() + dic1.items())
。 - bluepnume