0

对于 d1 中的每个条目(a,b),我有两个字典,d1 和 d2,如果 a 不是 d2 的键,则将(a,b)添加到每个条目(a,b)的新字典中d2,如果 a 不是 d1 的键(即,不是 d1 中的 a),则将 (a,b) 添加到新字典 示例 if d1 is {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]]
4

2 回答 2

1

如果您使用的是 Python 2.7,则可以获取每个 dict 的键视图,进行对称差分,然后从具有该键的 dict 中为每个键选择值:

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

在 Python 3.x 中,它几乎相同,除了viewkeyskeys

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

在 2.7 之前,没有 dict 视图或 dict 理解,但您可以只使用sets 和dict带有生成器表达式的构造函数:

result = dict((key, d1[key] if key in d1 else d2[key])
              for key in set(d1).symmetric_difference(d2))
于 2013-07-22T01:34:22.320 回答
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}

希望这可以帮助

于 2013-07-22T01:25:30.097 回答