Найти - Пользователи
Полная версия: Фильтр списка словарей
Начало » Python для новичков » Фильтр списка словарей
1
alexl89
Добрый день!
Я только начал изчать питон и уже второй день не мог придумать алгоритм для фильтрации списка.
Список выглядит следующим образом:
 [{'email':'user1@mail.ru', 'name':'name1', 'count':1},{'email':'user2@mail.ru', 'name':'name1', 'count':1}, {'email':'user3@mail.ru', 'name':'name1', 'count':1},{'email':'user1@mail.ru', 'name':'name1', 'count':1}]
Значение ключа email в словарях может повторятся. Допустим в списке выше есть 2 словаря с одинаковым email user1@mail.ru. Нужно отфильтровать список, чтобы остались элементы только с уникальным email, но значение count должно содержать количество неуникальных email.
Список выше должен превратиться в
 [{'email':'user1@mail.ru', 'name':'name1', 'count':2},{'email':'user2@mail.ru', 'name':'name1', 'count':1}, {'email':'user3@mail.ru', 'name':'name1', 'count':1}]
Может быть кто-то знает решение?
Py_User
уникальность поддерживается множеством
alexl89
Py_User
уникальность поддерживается множеством
Множества не поддерживают словари.
Py_User
а кто мешает добавлять туда только ‘email’? .. добавили, множество увеличилось - ‘email’ уникален
alexl89
Py_User
а кто мешает добавлять туда только ‘email’? .. добавили, множество увеличилось - ‘email’ уникален
Нужна именно такая структура, как в примере выше.
FishHook
   
lst = [{'email':'user1@mail.ru', 'name':'name1', 'count':1},
       {'email':'user2@mail.ru', 'name':'name1', 'count':1},
       {'email':'user3@mail.ru', 'name':'name1', 'count':1},
       {'email':'user1@mail.ru', 'name':'name1', 'count':1}]
res = {}
for i in lst:
    if i["email"] in res:
        res[i["email"]]["count"] += 1
    else:
        res[i["email"]] = i
print(res.values())
alexl89
FishHook
Большое спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB