python两个字典合二为一?混淆了键和值

时间:2013-07-22 01:15:29

标签: python loops dictionary key

对于d1中的每个条目(a,b),我有两个词典,d1和d2,如果a不是d2的键,则将(a,b)添加到每个条目的新词典中(a, b)在d2中,如果a不是d1的关键(即,不是d1中的a),则将(a,b)添加到新字典示例如果d1是{2:3,8:19,6:4,5 :12}和d2是{2:5,4:3,3:9},那么新词典应该是{8:19,6:4,5:12,4:3,3:9}。到目前为止,这是我的代码。

d3 = {}
for i in d1.items():
    if i[1] not  in d2.keys():
        d3[i[0]] = d2[i[1]]

2 个答案:

答案 0 :(得分:1)

如果您使用的是Python 2.7,则可以获取每个字典的关键视图,执行对称差异,并从具有该密钥的字典中选择每个键的值:

result = {key: d1[key] if key in d1 else d2[key]
          for key in d1.viewkeys() ^ d2.viewkeys()}

在Python 3.x中,它几乎相同,只有viewkeys只是keys

result = {key: d1[key] if key in d1 else d2[key]
          for key in d1.keys() ^ d2.keys()}

在2.7之前,没有dict视图或字典理解,但你可以使用setdict构造函数和生成器表达式:

result = dict((key, d1[key] if key in d1 else d2[key])
              for key in set(d1).symmetric_difference(d2))

答案 1 :(得分:0)

>>> d1={2:3, 8:19, 6:4, 5:12}
>>> d2={2:5, 4:3, 3:9}
>>> d12 = {k:v for k,v in d1.items() if k not in d2}
>>> d21 = {k:v for k,v in d2.items() if k not in d1}
>>> answer = {k:v for k,v in itertools.chain(d12.items(), d21.items())}
>>> answer
{8: 19, 3: 9, 4: 3, 5: 12, 6: 4}

希望这有帮助