2017-07-13 22 views
-1

假设你有拖字典A和B:如何根据列表值获得两个词典之间的差异?

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 6, 3]} 

你怎么能得到新的字典值A和B之间的区别是什么? 差异意味着A - B =>例如用于 'a' 键是[5,3] - [4,6]的结果是[1,-3]

+4

定义“区别”。它是关于A还是关于B?而且,这两个键之间的键也不一样。 –

+0

你想要的键区别?或价值dif? – Haranadh

+2

我想你需要的结果的例子。 –

回答

2

我假定你的意思A - B并且只在key s表示两者都存在。这是很多假设,但是你的问题是有点模糊..

如何:

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 3]} 

C = {k: [x - y for x, y in zip(v, B[k])] for k, v in A.items() if k in B} 
print(C) # {'d': [2, 2], 'a': [1, -3]} 

如果你不小心在是否都存在,要简单的“减法” Bkey小号去.get()zip_longest from itertools0像这样一个默认的参数:

from itertools import zip_longest 
C = {k: [x - y for x, y in zip_longest(v, B.get(k, []), fillvalue=0)] for k, v in A.items()} 
print(C) # {'a': [1, -3], 'd': [2, 2, 6], 't': [4]} 
+0

在发帖之前应该等待OP的澄清,这个问题值得关闭。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ你是对的,我后悔发布这个。我应该删除吗? –

+0

嗯,这不是我真正想说的地方,虽然我会建议你这样做(除了自己以外),然后一旦OP澄清你已经完成了他们想要的事情,就取消删除... –

1

这个怎么样?它增加了任何值乙从A缺失以及如果所述钥匙没有丢失它减去值在B从值的总和在A中的总和:

A = {'a':[5, 3], 't':[4], 'd':[2, 5, 6]} 
B = {'s':[11,5], 'a':[4,6], 'd':[0, 3]} 

def merge_and_differences(d1,d2): 
    d3 = d1.copy() 
    for k,v in d2.items(): 
     if k not in d3: 
      d3[k] = v 
     else: 
      d3[k] = sum(d3[k]) - sum(d2[k]) 
    return d3 

C = merge_and_differences(A,B) 

print (C) 

结果:

{'a': -2, 's': [11, 5], 't': [4], 'd': 10} 
相关问题