Список превратить в словарь

arr = [[137.0, '2021-01-22'], [139.0, '2021-01-23'], [142.0, '2021-01-26'], [137.0, '2021-01-27'], [142.0, '2021-01-28'], [137.0, '2021-01-29'], [142.0, '2021-01-30']]
res = [obj for obj in arr if [elem[0] for elem in arr].count(obj[0]) >= 3]

Я на данном коде из списка отфильтровал определенные под списки которые встречаются более 3 раза, и в ответе получаю такой список

[[137.0, '2021-01-22'], [142.0, '2021-01-26'], [137.0, '2021-01-27'], [142.0, '2021-01-28'], [137.0, '2021-01-29'], [142.0, '2021-01-30']]

но хотел бы получить в словаре вот таком варианте

{
    '137.0': ['2021-01-22', '2021-01-27', '2021-01-29'],
    '142.0': ['2021-01-26', '2021-01-28', '2021-01-30'],
}

Прошу помочь юному питонисту


Ответы (2 шт):

Автор решения: Zhihar
arr = [[137.0, '2021-01-22'], [139.0, '2021-01-23'], [142.0, '2021-01-26'], [137.0, '2021-01-27'], [142.0, '2021-01-28'], [137.0, '2021-01-29'], [142.0, '2021-01-30']]

# сформировать словарь
data = dict()

for obj in arr:
    data[obj[0]] = data.get(obj[0], []) + [obj[1]]

# оставить только записи с кол-вом элементов большим 3
res = dict(obj for obj in data.items() if len(obj[1]) >= 3)

print(res)
→ Ссылка
Автор решения: CrazyElf

В дополнение к ответу Zhihar. Цикл формирования словаря можно сделать несколько проще и понятнее, если использовать стандартную коллекцию defaultdict:

from collections import defaultdict

# сформировать словарь
data = defaultdict(list)

for obj in arr:
    data[obj[0]].append(obj[1])

При использовании defaultdict не нужно проверять, существует ли элемент словаря, соответствующий ключу, можно считать, что он всегда есть. Значение по умолчанию задаётся при создании словаря.

→ Ссылка