Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 28, 2016 11:35:11

alexl89
Зарегистрирован: 2016-12-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Добрый день!
Я только начал изчать питон и уже второй день не мог придумать алгоритм для фильтрации списка.
Список выглядит следующим образом:

 [{'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}]
Может быть кто-то знает решение?

Офлайн

#2 Дек. 28, 2016 11:56:51

Py_User
Зарегистрирован: 2016-12-16
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

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

уникальность поддерживается множеством

Офлайн

#3 Дек. 28, 2016 12:28:49

alexl89
Зарегистрирован: 2016-12-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Py_User
уникальность поддерживается множеством
Множества не поддерживают словари.

Офлайн

#4 Дек. 28, 2016 12:36:29

Py_User
Зарегистрирован: 2016-12-16
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

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

а кто мешает добавлять туда только ‘email’? .. добавили, множество увеличилось - ‘email’ уникален

Офлайн

#5 Дек. 28, 2016 14:04:36

alexl89
Зарегистрирован: 2016-12-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Py_User
а кто мешает добавлять туда только ‘email’? .. добавили, множество увеличилось - ‘email’ уникален
Нужна именно такая структура, как в примере выше.

Офлайн

#6 Дек. 28, 2016 14:17:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

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

   
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())



Отредактировано FishHook (Дек. 28, 2016 14:17:43)

Офлайн

#7 Дек. 28, 2016 14:25:26

alexl89
Зарегистрирован: 2016-12-28
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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

FishHook
Большое спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version