我有两个口头禅要合并:
a = {"name": "john",
"phone":"123123123",
"owns": {"cars": "Car 1", "motorbikes": "Motorbike 1"}}
b = {"name": "john",
"phone":"123",
"owns": {"cars": "Car 2"}}
如果a
和{
结果应该如下所示:
^{pr2}$使用a.update(b)
无效,因为它用b
的共享值覆盖{
{'name': 'john', 'phone': '123', 'owns': {'cars': 'Car 2'}}
目标是合并dict而不重写,并保留与特定键相关的所有信息(在两个dict中)。在
使用集合和事物,还可以合并任意数量的词典:
假设要合并的每个字典具有相同的“结构”,因此}中的dict。dict的每个元素也需要是散列的,因为这个方法使用集合来聚合唯一的值。在
"owns"
不能是a
中的列表和{下面的代码只适用于python3,因为在python2中,
^{pr2}$dict.keys()
返回一个普通的旧列表。在另一种方法是添加一个额外的
map()
,将列表转换为集合:使用递归,您可以构建一个字典理解来实现这一点。在
此解决方案还考虑到以后可能需要合并两个以上的字典,在这种情况下,会使值列表变平。在
示例:
^{pr2}$合并两个以上对象的示例:
您可以使用
itertools.groupby
和递归:输出:
^{pr2}$相关问题 更多 >
编程相关推荐