使用列表作为值对字典中的列表进行排序

时间:2016-01-02 16:02:13

标签: python list sorting

我有一个产生以下内容的程序:

{'Jim': [4, 2, 6], 'Fred': [5, 3, 8], 'Neil': [5, 1, 7]}

我希望能够将[]中的数字从最高到最低排序。

e.g。

{'Jim': [6, 4, 2], 'Fred': [8, 5, 3], 'Neil': [7, 5, 1]}

我希望能够显示他们的名字,然后是他们的最高分,请告诉我如何做到这一点。我用Python编码

由于

3 个答案:

答案 0 :(得分:2)

使用sorted函数进行排序。 reverse=True应按相反的顺序对数据进行排序,即从最高到最低。

>>> d = {'Jim': [4, 2, 6], 'Fred': [5, 3, 8], 'Neil': [5, 1, 7]}
>>> {i:sorted(j, reverse=True) for i,j in d.items()}
{'Jim': [6, 4, 2], 'Neil': [7, 5, 1], 'Fred': [8, 5, 3]}
>>> {i:max(j) for i,j in d.items()}
{'Jim': 6, 'Neil': 7, 'Fred': 8}

答案 1 :(得分:0)

使用词典理解和sorted

>>> d = {'Jim': [4, 2, 6], 'Fred': [5, 3, 8], 'Neil': [5, 1, 7]}
>>> {k:sorted(d[k], reverse=True) for k in d}
{'Jim': [6, 4, 2], 'Neil': [7, 5, 1], 'Fred': [8, 5, 3]}

这将为您提供一个新的字典,其中值(即列表)按降序排序。如果要对列表进行排序,请使用

>>> for k,v in d.iteritems():
...     d[k] = sorted(v, reverse=True)
... 
>>> d
{'Jim': [6, 4, 2], 'Neil': [7, 5, 1], 'Fred': [8, 5, 3]}

如果您使用的是Python3,请将d.iteritems()更改为d.items()

  

我希望能够显示他们的名字,然后是他们的最高分,请告诉我如何做到这一点。我用Python编码

两个选项。如果我们假设d_sorted是带有排序列表的字典,则迭代它并打印名称和每个列表的第一个元素。

>>> for name, scores in d_sorted.iteritems():
...     print name, scores[0]
... 
'Jim', 6
'Neil', 7
'Fred', 8

但是如果这就是你想做的一切,那么更简单的方法就是使用max而不是对列表进行预先排序。假设d是您的原始字典:

>>> for name, scores in d.iteritems():
...     print name, max(scores)
... 
'Jim', 6
'Neil', 7
'Fred', 8

答案 2 :(得分:0)

列表可以在原地排序,因此除非您需要新的字典,否则您不需要在每个值/列表上创建一个只调用list.sort

d = {'Jim': [4, 2, 6], 'Fred': [5, 3, 8], 'Neil': [5, 1, 7]}
for sub in d.values():
  sub.sort(reverse=1)
print(d)
{'Neil': [7, 5, 1], 'Jim': [6, 4, 2], 'Fred': [8, 5, 3]}