python - 如何按字典中列表的值排序
问题描述
按值排序字典列表我一直在尝试使用 lambda,但我无法弄清楚。
scale = {'A+': 4.3, 'A': 4.0, 'A-': 3.7,
'B+': 3.3, 'B': 3.0, 'B-': 2.7,
'C+': 2.3, 'C': 2.0, 'C-': 1.7,
'D+': 1.3, 'D': 1.0, 'D-': 0.7,
'F' : 0.0}
subject = {'math': {('Tom', 'B'), ('Kevin','D')},
'History': {('Kate', 'A+'),('Eric','C'),('Hannah','F')},
'English': {('Eli', 'B-')}}`
from collections import defaultdict
mingrade = 1.7
def pass(subject, mingrade):
output = defaultdict(list)
for subject_name,subject_grade in subject.items():
for student,grade in subject_grade:
if scale[grade]>=mingrade:
output[subject_name]+=[student]
return output
我得到像 {'math': ['Tom'], 'History': {('Kate'),('Eric')},'English': {('Eli')} 这样的输出,但我想按姓名和成绩,例如 'History': {('Kate'),('Eric') 将变为 'History': {('Eric'),('Kate')} 按字母顺序排列。另一个我想按年级得到它。成绩高的学生排在第一位。
解决方案
好的,所以为了获得具有两种不同类型的两个不同输出,我获取了您的代码,然后为您的函数创建了两个输出,其中一个按字母顺序排序,一个按等级排序。
scale = {'A+': 4.3, 'A': 4.0, 'A-': 3.7,
'B+': 3.3, 'B': 3.0, 'B-': 2.7,
'C+': 2.3, 'C': 2.0, 'C-': 1.7,
'D+': 1.3, 'D': 1.0, 'D-': 0.7,
'F' : 0.0}
subject = {'math': {('Tom', 'B'), ('Kevin','D')},
'History': {('Kate', 'A+'),('Eric','C'),('Hannah','F')},
'English': {('Eli', 'B-')}}
from collections import defaultdict
mingrade = 1.7
def test(subject, mingrade):
alpha_sort = defaultdict(list)
grade_sort = defaultdict(list)
for subject_name,subject_grade in subject.items():
#here i sort the sets first alphabetically and then by grade
#the sorted function allows me to pass a function on which i want
#to sort them as with the key keyword
sort_alpha = sorted(subject_grade, key=lambda x: x[0].lower())
sort_grade = sorted(subject_grade, key=lambda x: scale[x[1]], reverse=True)
#now I loop over each sorted list as you did and store them in a
#seperate default dicts
for student,grade in sort_grade:
if scale[grade]>=mingrade:
grade_sort[subject_name]+=[student]
for student,grade in sort_alpha:
if scale[grade]>=mingrade:
alpha_sort[subject_name]+=[student]
return alpha_sort, grade_sort
alpha, grade = test(subject, mingrade)
print(alpha, grade)
这给出了这个输出
defaultdict(<class 'list'>, {'math': ['Tom'], 'History': ['Eric', 'Kate'],
'English': ['Eli']})
defaultdict(<class 'list'>, {'math': ['Tom'], 'History': ['Kate', 'Eric'],
'English': ['Eli']})
推荐阅读
- javascript - 在three.js中围绕它的y轴旋转一个3D对象
- python - Flask 模板导致重复的 HTML
- perl - 交替循环嵌套 foreach 循环
- amazon-web-services - AWS Cognito - RESET_REQUIRED 重定向不起作用
- android - 使用 Lime/OpenFL 编译 android 时出错。无法获取 Java 版本(Windows 10)
- php - PHP索引数组到嵌套关联数组
- reactjs - antd 标签使用 react-router
- python - 这个使用 petl 的 lambda 函数有什么问题?
- github - 只有在 Travis 测试通过后才部署用户 Github 页面
- r - 仅命名列表中许多数据框的一列