如何打印字典的25%到75%的值?

时间:2019-08-22 17:40:16

标签: python python-3.x dictionary percentile

我要打印从字典的第25个百分点到第75个百分点的所有值,不带numpy

这是我尝试过的代码段。

# No Numpy allowed
import pandas as pd
def display_dashboard():
    df=pd.DataFrame({'student':student_list,'marks':marks_list})
    sorte=df.sort_values('marks',ascending=False)
    per_25=round(0.25*len(marks_list))
    per_75=round(0.75*len(marks_list))
    sor=df.sort_values('marks')
    new_dict = {k:v for k, v in sor.items() for v in range(per_25,per_75)}
    print("Students whose marks are between 25th % and 75th % are:-")
    print(new_dict)

它给出的答案是:-

Students whose marks are between 25th % and 75th % in ascending order of marks are:-
{'student': 7, 'marks': 7}

我想显示一个字典,其中显示学生及其分数在字典中总分的25%到75%之间。

2 个答案:

答案 0 :(得分:0)

您可以zip将学生列表和分数列表一起进行排序,并使用itertools.islice为第25个百分位数和第75个百分位数之间的条目获取迭代器,并将迭代器传递给{{1 }}构造函数以将学生姓名映射到他们的标记来构建字典:

dict

这将输出:

from itertools import islice
from operator import itemgetter
student_list = ['Amy', 'Ben', 'Carl', 'Dan', 'Ean', 'Fab', 'Gal', 'Han']
marks_list = [29, 70, 55, 81, 13, 42, 84, 37]
total = len(marks_list)
print(dict(islice(sorted(zip(student_list, marks_list), key=itemgetter(1, 0), reverse=True), round(0.25 * total), round(0.75 * total))))

答案 1 :(得分:0)

在形成dict的for循环中,kstudentmarksv是索引。因此,在dict键(“学生and标记) are overridden and the last index value 7`中被保留。因此,您得到的结果是:

{'student': 7, 'marks': 7}

我已将for loop替换为filter,然后将DataFrame转换为dict

sor = sor.loc[(sor.index >= per_25) & (sor.index <= per_75)]
new_dict = sor.to_dict('records')

这是修改后的可执行代码:

import pandas as pd

student_list=['a', 'b','c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
marks_list=[18, 45, 50, 100, 34, 45, 87, 50, 90, 26]

df=pd.DataFrame({'student':student_list,'marks':marks_list})
sorte=df.sort_values('marks',ascending=False)
per_25=round(0.25*len(marks_list))
per_75=round(0.75*len(marks_list))
sor=df.sort_values('marks')
sor = sor.loc[(sor.index >= per_25) & (sor.index <= per_75)]
new_dict = sor.to_dict('records')
print("Students whose marks are between 25th % and 75th % are:-")
print(new_dict)

它产生输出:

Students whose marks are between 25th % and 75th % are:-
[{'student': 'e', 'marks': 34}, {'student': 'f', 'marks': 45}, {'student': 'c', 'marks': 50}, {'student': 'h', 'marks': 50}, 
{'student': 'g', 'marks': 87}, {'student': 'i', 'marks': 90}, {'student': 'd', 'marks': 100}]