Как подсчитать одинаковые элементы по ключу в массиве?

filename = input('Enter name of file: ')
file = open(filename, 'r')
mass = []
mass1 = []

mass = file.readlines()

for i in mass:
    mass1.append(i.strip().split(','))

#------Sorted--------------

for i in sorted(mass1, key=lambda para : (para[0])):
    print(i)

file.close()

Вот файл с которого берется инфа: фамилия сотрудника, инициалы, номер телефона.

Bull,J.I,095874
Sektant,K.S,095874
Pituh,K.Y,097845
Lolya,L.E,067234
BPA4SMERTI,O.I,096567

На экран помимо отсортированной информации по фамилиям(по алфавиту), оно еще должно отдельно вывести информацию о тех сотрудниках в которых одинаковые номера телефонов. Как сделать цикл который будет выводить на экран сотрудников и их данные в которых одинаковые номера телефонов? Это должно выглядеть вот так:

Bull,J.I,095874
Sektant,K.S,095874

Как сделать


Ответы (3 шт):

Автор решения: Glebium

Возможно не лучшее решение, но в голову пришло это:

from collections import Counter

phone_numbers = []
for i in sorted(mass1, key=lambda para : (para[0])):
    phone_numbers.append(i[2])

c = Counter(phone_numbers)

for number, repeatability in c.items():
    if repeatability > 1:
        for i in mass1:
            if number == i[2]:
                print(i)
→ Ссылка
Автор решения: Vektor Valentine

Попробуйте так:

(На примере Вашего кода) Создаем список списков. Телефонный номер в каждом подсписке имеет индекс [2]. Ищет одинаковые номера в двойном цикле for и выводит на экран.

mass = file.readlines()
mass = sorted(mass)  #there can be your sorting algorithm 
mass = [ person.strip().split(',') for person in mass ]

#Find and print person with same phone numbers
TEL_INDEX = 2   # mass[i][2] == Phone number
for i in range(1, len(mass)):
    for k in range(0, i):
        if mass[i][TEL_INDEX] == mass[k][TEL_INDEX]:
            if mass[i] not in new_list:
                new_list.append(mass[i])
            if mass[k] not in new_list:
                new_list.append(mass[k])
→ Ссылка
Автор решения: MaxU

Откройте для себя Pandas:

читаем CSV файл в pandas DataFrame:

import pandas as pd   #  pip install pandas

df = pd.read_csv(r"D:\download\data.csv", header=None, names=["surname", "abbr", "phone_nr"])

выводим фрейм, отсортированный по имени:

print(df.sort_values("surname"))

      surname abbr  phone_nr
4  BPA4SMERTI  O.I     96567
0        Bull  J.I     95874
3       Lolya  L.E     67234
2       Pituh  K.Y     97845
1     Sektant  K.S     95874

выводим на экран сотрудников, с одинаковыми номерами телефонов:

print(df.groupby("phone_nr").filter(lambda x: len(x) > 1))

   surname abbr  phone_nr
0     Bull  J.I     95874
1  Sektant  K.S     95874
→ Ссылка