按特定字典键对字典列表进行排序

时间:2015-11-26 20:14:59

标签: python sorting dictionary

我有一系列词典:

LeaderBoard = [{'Driver':'Sebastian Williams', 'Car':1, 'Team':'Red Drink','Grid':2, 'Fastest Lap':'1:37.481','Race Time':'2:27:45.958','Points':10},
                   {'Driver':'Tom Hamilton' ,'Car':44 ,'Team':'Mercidas' ,'Grid':6 ,'Fastest Lap':'1:37.176' ,'Race Time':'2:26:52.094' ,'Points':25 },
                   {'Driver':'Danny Ricardo' ,'Car':3 ,'Team':'Red Drink' ,'Grid':8 ,'Fastest Lap':'1:38.459' ,'Race Time':'2:27:38.589' ,'Points':15 },
                   {'Driver':'Walter Borras' ,'Car':77 ,'Team':'Lewis' ,'Grid':14 ,'Fastest Lap':'1:38.264' ,'Race Time':'2:27:22.229' ,'Points':18 },
                   {'Driver':'Fernando Sonal' ,'Car':14 ,'Team':'Farrori' ,'Grid':16 ,'Fastest Lap':'1:38.587' ,'Race Time':'2:27:52.040' ,'Points':8 },
                   {'Driver':'Jeson Smith' ,'Car':22 ,'Team':'McMilan' ,'Grid':3 ,'Fastest Lap':'1:38.284' ,'Race Time':'2:27:39.484' ,'Points':12},]

如何按照最快的比赛时间排序?

我已经尝试了所有我能想到的东西。我使用replacesplit来使竞赛时间成为可以轻松比较的个别数字,但我无法使循环工作。

这是用于家庭作业,我们需要使用我们学到的排序算法。 sort或sorted不允许使用。

没有其他限制---任何排序字典数组的方法都可以。

2 个答案:

答案 0 :(得分:1)

您可以将sortedkey参数一起使用。

array = sorted(array,key= lambda x: x['d'])

答案 1 :(得分:0)

由于您必须使用自己的排序代码,因此本网站上的大多数答案都无法帮助您 - 它们通常基于Python附带的sortsorted函数。

您可以使用您已有的任何排序功能的轻微变体对这些词典进行排序。无论你的旧代码比较两个项目,如:

if a < b:
    # swap a and b

...您将比较这些项目中包含的值:

attribute = 'Race Time'
if a[attribute] < b[attribute]:
    # swap a and b

请注意,您的“比赛时间”实际上是某些奇怪格式的字符串,需要将工作转换为可比较的数字。这可能值得作为一个单独的函数编写,您的排序函数将在完全相同的位置使用:

if race_time(a) < race_time(b):
    ...

......甚至:

if is_faster(a, b):
    ...

要获得更通用的解决方案,请查找大多数语言用于通用排序的比较器功能,以及关键功能,这是现代版本中使用的更高效的变体Python (“How do I sort a list of dictionaries by values of the dictionary in Python?”,SuperBiasedMan在评论中提到,有许多使用关键功能的例子。)