RosettaCodeData/Task/Top-rank-per-group/Python/top-rank-per-group-2.py
2019-09-12 10:33:56 -07:00

34 lines
925 B
Python

from collections import namedtuple
from itertools import groupby
N = 2
db = '''Employee Name,Employee ID,Salary,Department
Tyler Bennett,E10297,32000,D101
John Rappl,E21437,47000,D050
George Woltman,E00127,53500,D101
Adam Smith,E63535,18000,D202
Claire Buckman,E39876,27800,D202
David McClellan,E04242,41500,D101
Rich Holcomb,E01234,49500,D202
Nathan Adams,E41298,21900,D050
Richard Potter,E43128,15900,D101
David Motsinger,E27002,19250,D202
Tim Sampair,E03033,27000,D101
Kim Arlich,E10001,57000,D190
Timothy Grove,E16398,29900,D190'''
rows = db.split('\n')
DBRecord = namedtuple('DBRecord', rows[0].replace(' ', '_'))
records = [DBRecord(*row.split(',')) for row in rows[1:]]
records.sort(key=lambda record: (record.Department, -float(record.Salary)))
print('\n\n'.join(
'\n '.join([dpt] + [str(g) for g in grp][:N])
for dpt, grp in groupby(
records,
lambda record: record.Department
)
))