lis中平均数的查找与排序

2024-03-29 01:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个制表符分隔的文本文件,其格式如下:

TITLE   FSAL
Professor   "30,000.00"
Professor   0
Staff   "90,000.00"
Professor   "50,000.00"
Manager "80,000.00"
Professor   "40,000.00"

我的目标是按最高的平均工资来排列职位。到目前为止,我掌握的代码是:

from collections import Counter
job_file = open("jobs.txt", "r")

headers = job_file.readline()
titles = []
salaries = []

for line in job_file.readlines():
  line.rstrip()
  (title, fsal) = line.split('\t')
  #convert fsal from string to float,
  fsal = float(fsal.replace('"', '').replace(',', ''))

  titles.append(title)
  salaries.append(fsal)

#Average salary for all titles
avg_salary = sum(salaries)/len(titles)
print "Average salary for all titles = ", avg_salary
#Average salary for all titles =  48333.3333333

如何按职务输出平均工资,以便使用.sort()按最高平均工资对他们进行排序,即:

average salary for Professor = 30000.0  #(30000.0 + 0.0 + 50000.0 + 40000.0)/4
average salary for Staff = 90000.0  #90000.0/1
average salary for Manager = 80000.0  #80000.0/1

最终输出应如下所示:

1. Staff 90000.0
2. Manager 80000.0
3. Professor 30000.0

Tags: forlinemanagerjoballfileaveragestaff
1条回答
网友
1楼 · 发布于 2024-03-29 01:30:43
#!/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)

编辑:OP希望每个职位的平均值:

#!/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)

相关问题 更多 >