распечатка дубликатов по количеству в списке списка Python - PullRequest
0 голосов
/ 12 июля 2020

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

Список:

[['jane','michael','david','Kieran','steven'],['peter','Ivan','michael','michael','Kieran'],['jane','michael','andrea','anthony','david'],
['michael','Kieran','Martinez','david','Courtney']]

Ожидаемый результат (новый список ):

['michael','kieran','david']

Ответы [ 5 ]

2 голосов
/ 12 июля 2020

попробуйте это, Counter + chain.from_iterable

from collections import Counter
from itertools import chain

print([k for k,v in Counter(chain.from_iterable(values)).items() if v >= 3])

['michael', 'david', 'Kieran']
1 голос
/ 12 июля 2020

Сначала вам нужно создать новый список имен, в котором вы могли бы перебирать, чтобы сгенерировать новый список

source = [['jane','michael','david','Kieran','steven'],['peter','Ivan','michael','michael','Kieran'],['jane','michael','andrea','anthony','david'],['michael','Kieran','Martinez','david','Courtney']]


new_names_list = []
for names in source :
    for n in names:
        new_names_list.append(n)

print(new_names_list) ## this is the new list of names derived from your source

Новое, вы можете использовать Counter для получения списка счетчиков

from collections import Counter
counter_name_dict = Counter(new_names_list)

result = []
for k, v in counter_name_dict.items():
    if v >= 3:
       result.append(k)

Результат теперь будет содержать только список имен, у которых есть счет 3 или более.

1 голос
/ 12 июля 2020

вы можете использовать для l oop для перебора списка и сохранения дубликатов в dict и разделения на основе количества

new_list=[]
dicta={}
for i in a:
    for j in i:
        if j in dicta:
            dicta[j]+=1
        else:
            dicta[j]=1            
for i in dicta.keys():
    if dicta[i]>=3 :
        new_list.append(i)
0 голосов
/ 12 июля 2020

Вот пример кода:

import collections

thelist = [['jane','michael','david','Kieran','steven'],['peter','Ivan','michael','michael','Kieran'],['jane','michael','andrea','anthony','david'],
['michael','Kieran','Martinez','david','Courtney']]

counts = {}

for l in thelist:
    print(collections.Counter(l))
    for key,value in collections.Counter(l).items():
        if key in counts:
            counts[key] += value
        else:
            counts[key] = value
newlist = []
for key,value in counts.items():
    if value == 3:
        newlist.append(key)
0 голосов
/ 12 июля 2020

Это одно из решений:

from collections import defaultdict

lists = [['jane','michael','david','Kieran','steven'],['peter','Ivan','michael','michael','Kieran'],['jane','michael','andrea','anthony','david'],
['michael','Kieran','Martinez','david','Courtney']]

d = defaultdict(lambda: 0)
for l in lists:
  for e in l:
    d[e] += 1

results = [key for key in d if d[key] >= 3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...