python - 如何按多个键对对象进行排序?

标签 python sorting dictionary

或者,实际上,我如何按多个键对字典列表进行排序?

我有一个字典列表:

b = [{u'TOT_PTS_Misc': u'Utley, Alex', u'Total_Points': 96.0},
 {u'TOT_PTS_Misc': u'Russo, Brandon', u'Total_Points': 96.0},
 {u'TOT_PTS_Misc': u'Chappell, Justin', u'Total_Points': 96.0},
 {u'TOT_PTS_Misc': u'Foster, Toney', u'Total_Points': 80.0},
 {u'TOT_PTS_Misc': u'Lawson, Roman', u'Total_Points': 80.0},
 {u'TOT_PTS_Misc': u'Lempke, Sam', u'Total_Points': 80.0},
 {u'TOT_PTS_Misc': u'Gnezda, Alex', u'Total_Points': 78.0},
 {u'TOT_PTS_Misc': u'Kirks, Damien', u'Total_Points': 78.0},
 {u'TOT_PTS_Misc': u'Worden, Tom', u'Total_Points': 78.0},
 {u'TOT_PTS_Misc': u'Korecz, Mike', u'Total_Points': 78.0},
 {u'TOT_PTS_Misc': u'Swartz, Brian', u'Total_Points': 66.0},
 {u'TOT_PTS_Misc': u'Burgess, Randy', u'Total_Points': 66.0},
 {u'TOT_PTS_Misc': u'Smugala, Ryan', u'Total_Points': 66.0},
 {u'TOT_PTS_Misc': u'Harmon, Gary', u'Total_Points': 66.0},
 {u'TOT_PTS_Misc': u'Blasinsky, Scott', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Carter III, Laymon', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Coleman, Johnathan', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Venditti, Nick', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Blackwell, Devon', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Kovach, Alex', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Bolden, Antonio', u'Total_Points': 60.0},
 {u'TOT_PTS_Misc': u'Smith, Ryan', u'Total_Points': 60.0}]

我需要使用由 Total_Points 反转的多键排序,然后不被 TOT_PTS_Misc 反转。

这可以在命令提示符下完成,如下所示:

a = sorted(b, key=lambda d: (-d['Total_Points'], d['TOT_PTS_Misc']))

但我必须通过一个函数来运行它,在该函数中传递列表和排序键。例如 def multikeysort(dict_list, sortkeys):.

对于传入 multikeysort 函数的任意数量的键,如何使用 lambda 行对列表进行排序,并考虑到排序键可能具有任意数量的键以及需要反向排序的键会在它之前用'-'标识吗?

最佳答案

This article对执行此操作的各种技术有很好的概述。如果您的要求比“完全双向多键”更简单,请查看。很明显接受的答案和我刚刚发布的博客文章 引用在某种程度上相互影响,虽然我不知道是哪个顺序。

如果链接失效,这里是上面未涵盖的示例的快速概要:

mylist = sorted(mylist, key=itemgetter('name', 'age'))
mylist = sorted(mylist, key=lambda k: (k['name'].lower(), k['age']))
mylist = sorted(mylist, key=lambda k: (k['name'].lower(), -k['age']))

关于python - 如何按多个键对对象进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143671/

相关文章:

python - 如何存储标记化的结果以供进一步索引?

java - 比较器类显示错误排序

Swift 2.0 初始化嵌套字典无法按预期工作

python - 嵌套列表到字典

c# - 在 C# 中缓存存储字典的最佳方法

python - 如何使用 Django 模板应用外部 URL

python - Validation_data 和 Validation_split

python - 我可以阻止fabric 提示我输入sudo 密码吗?

python - 使用 itemgetter 对元组进行排序的困难

python-3.x - 使用快速排序对区间进行模糊排序