Alenorze
@Alenorze
Не люблю Индию

Как найти дубликаты значений списков?

Всем привет, у меня есть необычная задача, которую в гугле не описать. У меня есть дата такой структуры:
[(1566767777.0, 'Aaron Paul', 'dorety1', 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '8ff7', '08f3', 'Human Name', 'ENTITY', '19fd', 0, 0), (1566767863.0, 'Aaron Paul', "{'username': 'aaronpaul', 'last_name': 'Paul', 'friends_count': 509, 'is_group': False, 'is_active': True, 'trust_request': None, 'phone': None, 'profile_picture_url': 'http, 'is_blocked': False, 'id': '1690', 'identity': None, 'date_joined': '2015-05-22T18:58:12', 'about': ' ', 'display_name': 'Aaron Paul', 'first_name': 'Aaron', 'friend_status': None, 'email': None}", 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '7049', 'a458', 'Human Name', 'ENTITY', '19fd', 0, 0), (1566, 'Aaron Paul', 'Possible full name: Aaron Paul', 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '6685', '235f', 'Human Name', 'ENTITY', '19fd', 0, 0), (1566767503.0, 'Antoine Griezmann', 'dorety', 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '16ab', '08f3', 'Human Name', 'ENTITY', '19fd', 0, 0), (1566767108.0, 'Boris Johnson', 'dorety', 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '7931', '08f3', 'Human Name', 'ENTITY', '19fd', 0, 0)]


Мне нужно получить значения из кортеджей(списков), в которых list[1] дублируется, и list[3] не дублируется. То есть в данных выше у нас везде одинаковый list[3](sfp_names), и в нескольких результатах list[1](Aaron Paul), то есть с этого списка мы должны получить только (1566767777.0, 'Aaron Paul', 'dorety1', 'sfp_names', 'HUMAN_NAME', 100, 100, 0, '8ff7', '08f3', 'Human Name', 'ENTITY', '19fd', 0, 0) и еще два остальных у которых имя Aaron Paul. Поскольку нам вообщем нет разницы в скольки списках оно встречается. С этих трех списков необходимо получить одно значение [['Aaron Paul', 'sfp_names']]. Но если у нас третий кортедж имел имя модуля sfp_names_2 то нам необходимо получить уже два значения, посколько модули разные. [['Aaron Paul', 'sfp_names'], ['Aaron Paul', 'sfp_names_2']].

Касательно того что я сам сделал, по этой части ничего в голову не пришло у меня есть всего лишь способы находить дубликаты внутри списка.
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Taus
Если я правильно понял, то вам требуется выводить уникальные пары list[1], list[3] при условии, что значение из list[1] встречается больше 1 раза во всём списке.
from collections import Counter, defaultdict
from operator import itemgetter

l = [...] # Ваш список

items = (1, 3)

names = defaultdict(Counter)
for name, subname in map(itemgetter(*items), l):
    names[name][subname] += 1
common_names = {name: set(subnames) for name, subnames in names.items() if sum(subnames.values()) > 1}

result = [[name, subname] for name, subnames in common_names.items() for subname in subnames]
Ответ написан
Комментировать
dimonchik2013
@dimonchik2013
non progredi est regredi
Set и Counter в помошь, правда, списки превратить в кортежи нужно будет
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы