2016-08-24 165 views
-3

我有如下的字典:如何根据列表中的值以降序对字典进行排序?

{'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

@GáborErdős我的实际问题陈述是读取一个文件,并出现问题描述中给出的排序输出。该文件的格式如下:德约科维奇:穆雷:2-6,6-7,7-6,6-3,6-1 默里:德约科维奇:6-3,4-6,6-4,6 -3 德约科维奇:穆雷:6-0,7-6,6-7,6-3 穆雷:德约科维奇:6-4,6-4 德约科维奇:穆雷:2-6,6-2,6-0德里科维奇:6-3,4-6,6-3,6-4 德约科维奇:穆雷:7-6,4-6,7-6,2-6,6-2 默里:德约科维奇:7 -5,7-5 威廉姆斯:Muguruza:3-6,6-3,6-3。我已经编写了代码来成功读取文件,并根据我提到的词典中的Pset中给出的条件更新数据。 –

+1

所以,你希望你的输出是一个按键的列表,根据它们的值来排序?因为你不能排序字典。 –

回答

2

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

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 
+0

匹配他想要的顺序,你应该添加',reverse = True'到'sorted'函数 – depperm

+0

是的,我错过了那个部分,但是因为我看到只有元素5和6被颠倒了。在这种情况下,我只是预处理列表并交换值。我想它更容易。 –

+0

@使用itemgetter(1)是否处理​​2个键有多个相同值的情况。例如,如果{key1:[1,2,3,15],key2:[1,2,3,4]} 因此,如果使用这种方法将key2放在key1之前,以便升序排序? –

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)) 
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])) 
相关问题