对于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]]
答案 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视图或字典理解,但你可以使用set
和dict
构造函数和生成器表达式:
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}
希望这有帮助