假設你有拖字典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]
假設你有拖字典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]
我假定你的意思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]}
如果你不小心在是否都存在,要簡單的「減法」 B
的key
小號去.get()
和zip_longest
from itertools
與0
像這樣一個默認的參數:
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]}
在發帖之前應該等待OP的澄清,這個問題值得關閉。 –
@cᴏʟᴅsᴘᴇᴇᴅ你是對的,我後悔發佈這個。我應該刪除嗎? –
嗯,這不是我真正想說的地方,雖然我會建議你這樣做(除了自己以外),然後一旦OP澄清你已經完成了他們想要的事情,就取消刪除... –
這個怎麼樣?它增加了任何值乙從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}
定義「區別」。它是關於A還是關於B?而且,這兩個鍵之間的鍵也不一樣。 –
你想要的鍵區別?或價值dif? – Haranadh
我想你需要的結果的例子。 –