我有幾個 python 字典
dict1 = {0:[('a',10),('b',11),('c',12)],1:[('a',12),('b',15),('c',16)]}
dict2 = {0:[('a',13),('b',15),('c',12)],1:[('a',12),('b',18),('c',20)]}
我正在嘗試查看元組的值是否增加。
即 dict1 (a,10) dict2 (a,13),所以增量為 3。結果
預期輸出:
dict3 = {0: ('a',3),('b',4),1:('b',3),('c',4)}
我的代碼
dict3 = {}
for (k,v), (k2,v2) in zip(dict1.items(),dict2.items()):
for va1,va2 in zip(v,v2):
if abs(int(va1[1])-int(va2[1]) !=0):
dict3[k] = ((va1[0],abs(int(va1[1])-int(va2[1]))))
但是正在被覆寫
{0: ('b', 4), 1: ('c', 4)}
uj5u.com熱心網友回復:
在dict3[k] = ((va1[0],abs(int(va1[1])-int(va2[1]))))每次迭代都覆寫該值時,您需要將新值添加到現有值中。您可以使用get空串列作為默認值來執行此操作
diff = abs(int(va1[1]) - int(va2[1]))
if diff != 0:
dict3[k] = dict3.get(k, []) [(va1[0], diff)]
輸出:
{0: [('a', 3), ('b', 4)], 1: [('b', 3), ('c', 4)]}
uj5u.com熱心網友回復:
您忘記在輸出中創建串列結構,因此您只需用每個新元素覆寫 dict3 值,而不是在串列中創建新專案。
這是使用字典理解的替代方法
dict1 = {0:[('a',10),('b',11),('c',12)],1:[('a',12),('b',15),('c',16)]}
dict2 = {0:[('a',13),('b',15),('c',12)],1:[('a',12),('b',18),('c',20)]}
out = {k: [(a, abs(b2-b)) for i, (a ,b) in enumerate(l)
if (b2:=dict2[k][i][1]) != b] # walrus operator (python ≥ 3.8)
for k,l in dict1.items()}
輸出:
{0: [('a', 3), ('b', 4)], 1: [('b', 3), ('c', 4)]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/455999.html
下一篇:在JS中使用地圖迭代JSON字串
