#!/usr/bin/python
import collections
Job = collections.namedtuple('Job', ['title', 'salary'])
all_jobs = []
with open("jobs.txt", "r") as job_file:
headers = job_file.readline()
for line in job_file:
(title, fsal) = line.rstrip().split('\t')
fsal = float(fsal.replace('"', '').replace(',', ''))
all_jobs.append(Job(title, fsal))
avg_salary = sum(
job.salary for job in all_jobs) / len(all_jobs)
print "Average salary for all titles = ", avg_salary
sorted_jobs = sorted(
all_jobs, key=lambda job: job.salary, reverse=True)
for i, j in enumerate(sorted_jobs):
print '%i. %s \t%g' % (i + 1, j.title, j.salary)
Edited: the OP wanted averages for each job title:
#!/usr/bin/python
import collections
Job = collections.namedtuple('Job', ['title', 'salary'])
salaries = {}
with open("jobs.txt", "r") as job_file:
headers = job_file.readline()
for line in job_file:
(title, fsal) = line.rstrip().split('\t')
fsal = float(fsal.replace('"', '').replace(',', ''))
if title in salaries:
salaries[title].append(fsal)
else:
salaries[title] = [fsal]
average = lambda alist: sum(alist) / len(alist)
average_salaries = [Job(title, average(salaries[title]))
for title in salaries]
sorted_salaries = sorted(
average_salaries, key=lambda job: job.salary, reverse=True)
for i, j in enumerate(sorted_salaries):
print '%i. %s \t%g' % (i + 1, j.title, j.salary)