2016-01-04 4 views
0

меня есть словарьКак отсортировать словарь по значению, где ключ является кортеж

d = {('08', '10010'):6, ('23', '10017'):6,('06444', '10028'): 6,('21', '10027'): 6} 

Я хочу, чтобы отсортировать его по второму значению

Если у меня есть элемент (x,y):z, мне это нужно основываться на у

я сделал что-то вроде этого, но это не работает

print sorted(d, key=lambda item:item[0][1]) 

есть идеи ?

+0

Что вы имеете в виду, «Это Безразлично» t work out "? Каков результат, которого вы ожидаете, и какой результат вы получаете? –

+0

Использовать 'itemegtter'' sorted (d, key = operator.itemgetter (1)) 'в соответствии с обманом –

ответ

1

Там две проблемы:
1- Для сортировки по второму значению ключа-кортежа, вы забыли .items() вызов

>>> print sorted(d.items(), key=lambda item:item[0][1]) 
[(('08', '10010'), 6), (('23', '10017'), 6), (('21', '10027'), 6), (('06444', '10028'), 6)] 

2- Если вам нужна Dict, где ключи, отсортированных по этому критерию, вам нужен OrderedDict объект, потому что в Словаре по умолчанию клавиши порядок не гарантируется

>>> print dict(sorted(d.items(), key=lambda item:item[0][1])) 
{('23', '10017'): 6, ('21', '10027'): 6, ('08', '10010'): 6, ('06444', '10028'): 6} 
>>> from collections import OrderedDict 
>>> print OrderedDict(sorted(d.items(), key=lambda item:item[0][1])) 
OrderedDict([(('08', '10010'), 6), (('23', '10017'), 6), (('21', '10027'), 6), (('06444', '10028'), 6)]) 
1

почти там ...

sorted(d,key=lambda x: x[1]) 
[('08', '10010'), ('23', '10017'), ('21', '10027'), ('06444', '10028')] 

отмечают, что это отсортированный список ключей, а не словарь. Для того, чтобы получить полное представление словаря (со значениями) изменения d к d.items()

+0

Ударьте меня на несколько секунд. :) – erip