Как подсчитать одинаковые элементы по ключу в массиве?
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 шт):
Возможно не лучшее решение, но в голову пришло это:
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)
Попробуйте так:
(На примере Вашего кода) Создаем список списков. Телефонный номер в каждом подсписке имеет индекс [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])
Откройте для себя 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