найдите все одинаковые ключи в списке диктов и найдите разницу между их значениями

#python #list #loops #dictionary

Вопрос:

У меня есть упражнение, в котором я получаю две или более разреженных матрицы, и мне нужно найти разницу между ними. Вход-это список диктов, а выход-диктант, в котором есть различия:

вход: diff_sparse_matrices([{(1, 3): 2, (2, 7): 1}, {(1, 3): 6}])
выход: {(1, 3): -4, (2, 7): 1}

 def diff_sparse_matrices(lst):  new_dict = {}  for d in lst :  for key in d.keys() :  

Это все, что я смог придумать. Как я могу написать этот код?

  • Я не могу использовать numpy
  • Я не могу использовать набор

Мне также нужно удалить элемент, если значение ключа равно 0, поэтому

вход: diff_sparse_matrices([{(1, 3): 2, (2, 7): 1}, {(1, 3): 2}])
выход: {(2, 7): 1}

Я не знаю, почему, но если ввод

 [{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}]  

на выходе получается

 {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4,2): -10}  

Обратите внимание, что это — 7 и -10, а не 7 и 10

Ответ №1:

Вы можете попробовать это с dict.get() :

 lst_dct = [{(1, 3): 2, (2, 7): 1}, {(1, 3): 6, (9,10): 7}, {(2,7): 0.5, (4,2): 10}]  res = {} for ld in lst_dct:  for k,v in ld.items():  res[k] = -v - res.get(k,0)   print(res)   

Выход:

 {(1, 3): -4, (2, 7): 0.5, (9, 10): -7, (4, 2): -10}  

Комментарии:

1. можете ли вы достичь этого без попыток и за исключением /

2. @sds отредактированная база ответов новый отредактированный вопрос