Список превратить в словарь
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 не нужно проверять, существует ли элемент словаря, соответствующий ключу, можно считать, что он всегда есть. Значение по умолчанию задаётся при создании словаря.