如何根据列表的值作为其值按递减顺序对字典进行排序?

时间:2016-08-24 15:52:51

标签: python

我有一本字典如下:

{'Muguruza': [0, 0, 1, 12, 2, 15], 'Williams': [0, 1, 2, 15, 1, 12], 'Murray': [2, 2, 16, 143, 13, 142], 'Djokovic': [3, 1, 13, 142, 16, 143]}

我想根据相应列表中的值按递减顺序对其进行排序。

我必须按照排名的降序打印到屏幕上的摘要,其中排名是按照该顺序中的条件1-6(如列表中给出的)(比较项目1,如果相等比较项目2) ,如果等于比较项目3等,则注意到对于项目5和6,比较是相反的。)

我的输出应该如下:

Djokovic 3 1 13 142 16 143
Murray 2 2 16 143 13 142
Williams 0 1 2 15 1 12
Muguruza 0 0 1 12 2 15

威廉姆斯和默里在列表的索引0处对元素具有相同的值,因此它们将根据列表中下一个索引的值进行比较。

我怎样才能在Python中执行此操作?

3 个答案:

答案 0 :(得分:2)

您可以将python列表与> < =进行比较。就那么简单。它会做你想要的完全相同的事情。 此外,operator是基于值

对dicts进行排序的好方法
dict = {'Muguruza': [0, 0, 1, 12, 2, 15], 'Williams': [0, 1, 2, 15, 1, 12], 'Murray': [2, 2, 16, 143, 13, 142], 'Djokovic': [3, 1, 13, 142, 16, 143]}
import operator
print(sorted(dict.items(), key=operator.itemgetter(1)))

for i in sorted_list:
    print(i[0], " ".join([str(j) for j in i[1]]))

返回

Williams 0 1 2 15 1 12
Murray 2 2 16 143 13 142
Djokovic 3 1 13 142 16 143
Muguruza 9 0 1 12 2 15

答案 1 :(得分:1)

这是一个可能的答案:

import operator

data = {
    'Muguruza': [0, 0, 1, 12, 2, 15],
    'Williams': [0, 1, 2, 15, 1, 12],
    'Murray': [2, 2, 16, 143, 13, 142],
    'Djokovic': [3, 1, 13, 142, 16, 143]
}

output = reversed(sorted(data.items(), key=operator.itemgetter(1)))
print("\n".join([(i[0] + " ".join([str(j) for j in i[1]])) for i in output]))

答案 2 :(得分:0)

你可以做到

d={'Muguruza': [0, 0, 1, 12, 2, 15], 'Williams': [0, 1, 2, 15, 1, 12], 'Murray': [2, 2, 16, 143, 13, 142], 'Djokovic': [3, 1, 13, 142, 16, 143]}
for v,k in sorted((v,k) for k,v in d.items()):
    print(k,"\t".join(v))