如何合并两个Python词典

在上一教程中,我们了解了Python Dictionaries ,并看到它们被视为具有key/value对的无序集合,其中用于访问与位置相对的项(例如在列表中)。

在这个快速提示中,我将向您展示如何将两个词典连接在一起(合并)。

Update()方法

假设我们有以下两个字典:

dict1 = {'bookA': 1, 'bookB': 2, 'bookC': 3}
dict2 = {'bookC': 2, 'bookD': 4, 'bookE': 5}

我们如何将这两个词典合并到一个字典中? 在这方面我们可以使用的功能是update([other]) 。 如Python文档中所述:

使用来自其他的键/值对更新字典,覆盖现有键。 不返回None
update()接受另一个字典对象或键/值对的可迭代(作为元组或其他长度为2的其他可迭代)。 如果指定了关键字参数,则将使用以下键/值对更新字典: d.update(red=1, blue=2)

因此,要合并以上两个字典,我们可以输入以下内容:

dict2.update(dict1)

假设您键入以下语句以查看结果:

print dict2.update(dict1)

在这种情况下,您将获得None ! 这是因为update()函数不会返回新的字典。 为了获得串联的结果,只需键入以下内容:

print dict2

在这种情况下,您将获得以下输出:

{'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5}

如果我们执行以下操作怎么办?

dict1.update(dict2)
print dict1

在这种情况下,您将获得以下输出:

{'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5}

注意,在第一种情况下, dict2.update(dict1) ,我们使用dict2中的键/值对更新字典dict1 ,并覆盖所有现有键。 我们注意到,存在的键是'bookC' ,在这种情况下,它的值为3 ,因为我们正在使用dict1的键/值对进行dict1 。 在后一种情况下,这将是相反的,即dict1.update(dict2) ,其中我们使用dict1中的键/值对更新字典dict2

但是,使用update()合并两个字典存在一个问题。 问题在于可以修改原始词典。 换句话说,例如在第一种情况下dict2.update(dict1) ,可以修改dict2的原始版本,在后一种情况下dict1.update(dict2)可以修改dict1的原始版本。 也就是说,如果您对保留需要更新的字典的原始版本不感兴趣,则可以使用update()合并两个字典。 这里的原始版本是指保留密钥的值。

在一个表达式中合并两个字典

可以用来合并两个字典的另一种方法,可以在一个表达式中执行这样的任务,如下所示:

print dict(dict2, **dict1)

该语句的输出为:

{'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5}

因此, dict1覆盖dict2 。 如果要dict2覆盖dict1 ,请输入:

print dict(dict1, **dict2)

在这种情况下,输出为:

{'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5}

保留关键价值

回到上一期保留键值的问题,我们如何在保留每本词典的原文的同时合并两个字典?

一种变通方法可以如下所示(从此StackOverflow线程的答案中获取):

from itertools import chain
from collections import defaultdict
dict1 = {'bookA': 1, 'bookB': 2, 'bookC': 3}
dict2 = {'bookC': 2, 'bookD': 4, 'bookE': 5}
dict3 = defaultdict(list)
for k, v in chain(dict1.items(), dict2.items()):
    dict3[k].append(v)

for k, v in dict3.items():
    print(k, v)

在这种情况下的输出将是:

('bookA', [1])
('bookB', [2])
('bookC', [3, 2])
('bookD', [4])
('bookE', [5])

因此,从这个快速技巧中可以看到,使用Python合并两个字典非常容易,如果我们想在每个字典中保留相同键的值,它将变得更加复杂。

学习Python

无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。

翻译自: https://code.tutsplus.com/tutorials/how-to-merge-two-python-dictionaries--cms-26230

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值