2016-04-07 3 views
0

У меня есть словарь с именем в виде ключа и списком, содержащим оценки в качестве значения.Python сортировать список значений, а затем сортировать по значению

Я пытаюсь сортировать списки в значениях, а затем сортировать весь словарь по значениям - делая его таким, чтобы он сортировался по наивысшей оценке.

Вот словарь:

{'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]} 

Я пытаюсь использовать код I'v найденный из других мест StackOverflow, но я не нашел вопрос, специфичный для этого еще.

print(d2) 
d2 = sorted(d2.items(), key = itemgetter(1)) 
for key in d2: 
    print(key, d2[key]) 

Я, вероятно, делаю гору из мухи с этим, но я искренне тупик.

+2

Пожалуйста, напишите свой ожидаемый результат. – JRodDynamite

+0

Что такое 'itemgetter'? – Finwood

+0

@Finwood: ['operator.itemgetter'] (https://docs.python.org/3/library/operator.html#operator.itemgetter) – zondo

ответ

0

Только itemgetter(1) не будет сортировать. Вы должны написать свой собственный ключ для этого:

def get_return(key_value): 
    return list(sorted(key_value[1])), key_value[0] 

d2 = sorted(d2.items(), key=get_return, reverse=True) 

for key, value in d2: 
    print(key, value) 

Here является полезным учебником для сортировки словарей по ключам/значениям, которые были рекомендованы spectre-d

+0

Спасибо, что так много! Это действительно полезно. –

0

Это напечатают словарь в порядке вы указали (при условии, что вы имели в виду высокий балл-первых):

d = {'Dave_Wright': [10], 'Clara_Johnson': [9, 7], 'Amy_Kukri': [9, 8, 9], 'Eden_Jia': [10]} 

print ('\n'.join(
    '{}, {}'.format(key, sorted(value, reverse=True)) 
    for key, value in sorted(d.items(), key=lambda x:x[1], reverse=True))) 

Результат:

Dave_Wright, [10] 
Eden_Jia, [10] 
Amy_Kukri, [9, 9, 8] 
Clara_Johnson, [9, 7] 
0

Словари обычно не сортируются; хотя вы можете сортировать пары ключ-значение в словаре.

for name, scores in sorted(d2.items(), key=lambda x: max(x[1]), reverse=True): 
    print name, sorted(scores) # reverse=True? 
0
for l in d.values(): 
    l.sort(reverse=True) # this will sort the values in place(mutate the dict) 
result = sorted(d.items(), key=lambda x: x[1], reverse=True) 
Out[518]: 
[('Eden_Jia', [10]), 
('Dave_Wright', [10]), 
('Amy_Kukri', [9, 9, 8]), 
('Clara_Johnson', [9, 7])] 

Является ли это выход вы ожидали?

Смежные вопросы