В списке вида list = [[i,j], ... ] найти одинаковые значение i и сложить соответствующие значения и вывести в новый список, чтобы i не повторялись
у меня есть следующий лист:
maker_list = [[2.3477, 110.0], [2.3465, 31.0], [2.3476, 134.0], [2.347, 21.0], [2.3471, 16.0], [2.3477, 3.0], [2.3468, 17.0], [2.3473, 110.0], [2.3471, 6.0], [2.347, 39.0], [2.347, 106.0], [2.3468, 106.0], [2.3467, 638.0], [2.3467, 178.0], [2.3466, 106.0], [2.3466, 340.0], [2.3465, 325.0], [2.3464, 78.0], [2.3463, 106.0], [2.3462, 50.0], [2.3462, 62.0], [2.3481, 110.0]]
maker_list[i][0] - это цена; maker_list[0][j] - это объем. Значения цены в maker_list может повторяться.
Мне необходимо получить новый лист, где значения цены не будет повторяться, а соответствующий повторяющимся ценам объем будет сложен примерно вот так:
end_list = [[2.3477, 113.0],[2.3465, 356.0],[2.3476, 134.0],[2.347, 166.0],[2.3471, 22.0],[2.3468, 123.0],[2.3473, 110.0],[2.3467, 816.0],[2.3466, 446.0],[2.3464, 78.0][2.3463, 106.0],[2.3462, 112.0],[2.3481, 110.0]]
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Объём у вас в maker_list[i][1], а не как вы написали. Сделайте сначала из списка словарь вида цена: объём, просуммируйте в словарь все объёмы, а потом обратно сделайте из словаря список.
d = {}
for k,v in maker_list:
d[k] = d.get(k, 0) + v
new_list = [[k, v] for k,v in d.items()]
print(new_list)
Вывод:
[[2.3477, 113.0], [2.3465, 356.0], [2.3476, 134.0], [2.347, 166.0], [2.3471, 22.0], [2.3468, 123.0], [2.3473, 110.0], [2.3467, 816.0], [2.3466, 446.0], [2.3464, 78.0], [2.3463, 106.0], [2.3462, 112.0], [2.3481, 110.0]]