2010-08-03 4 views
2

содержимого моего словаря примерно так: -нужна помощь с функцией сортировки в питоне

>>> dict 
{'6279': '45', '15752': '47', '5231': '30', '475': '40'} 

Я попытался с помощью функции сортировки по клавишам. Я заметил, что функция сортировки не работает для ключа - 15752. Здесь Вы можете найти: -

>>> [k for k in sorted(dict.keys())] 
['15752', '475', '5231', '6279'] 

Может кто-то указать на способ для меня, чтобы обойти эту проблему?

Благодаря


Мой ожидаемый результат: -

['475', '5231', '6279', '15752'] 
+1

Какой у вас желаемый результат? Вы продемонстрировали сортировку ключей. Или это не сортировка, как вам бы хотелось? Вы получаете сортировку текста, а не числовую сортировку? –

+0

Python просто делает то, что вы ему сказали. То, как вы назвали sorted(), работает в списке ключей словаря. Поскольку клавиши являются строками, сначала появляется «15752» («1» - до «4» ...). – GreenMatt

+2

Не называть ваш словарь 'dict'. Вы затеняете 'dict()'. –

ответ

10

ах вы хотите отсортировать по числовому значению не строки, так что вы должны преобразовать строки в число с помощью int(s) в каком-то момент до или просто использовать sorted(dict.keys(), key=int)

+2

+1 для 'key = int' –

+1

sorted (dict, key = int) достаточно – hop

2

Если моя догадка в моем комментарии была права, и вы хотите, цифровые клавиши отсортированы изменить строку кода следующим образом:

sorted([int(k) for k in test.keys()]) 
# returns [475, 5231, 6279, 15752] 
2

Если они ВСЕ,

sorted(dict, lambda x, y: cmp(int(x), int(y))) 
+2

вы не должны использовать cmp в этом примере, используйте ключ – hop

1

Если вы хотите сортировать численно, то число магазинов в вашем словарь не строки, то он просто будет работать

>>> dict 
{6279: '45', 15752: '47', 5231: '30', 475: '40'}