Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 2, 2010 11:30:37

JiMKE
От:
Зарегистрирован: 2010-06-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива при помощи выражений - генераторов.

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

types_array =

            n = len(types_array)-1
j = 0
while j < n:
i = 0
while i < n-j:
if len(types_array[i].get('key','N/A')) < len(types_array[i+1].get('key','N/A')):
(types_array[i],types_array[i+1]) = (types_array[i+1],types_array[i])
print '%s - %s'%(len(types_array[i].get('key','N/A')),len(types_array[i+1].get('key','N/A')))
i+=1
j+=1



Офлайн

#2 Июнь 2, 2010 12:01:28

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Сортировка массива при помощи выражений - генераторов.

In [9]: sorted(types_array, key=lambda x: x.get('value', None))
Out[9]:
[{'key': 'abcde', 'value': '1'},
{'key': 'ab', 'value': '2'},
{'key': 'abc', 'value': '3'},
{'key': 'abcd', 'value': '4'},
{'key': 'a', 'value': '5'}]

In [10]: sorted(types_array, key=lambda x: x.get('key', None))
Out[10]:
[{'key': 'a', 'value': '5'},
{'key': 'ab', 'value': '2'},
{'key': 'abc', 'value': '3'},
{'key': 'abcd', 'value': '4'},
{'key': 'abcde', 'value': '1'}]



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Июнь 3, 2010 03:32:25

JiMKE
От:
Зарегистрирован: 2010-06-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива при помощи выражений - генераторов.

Ой - ё! Как элегантно!
Большое спасибо. А так я сортирую по длине ключа…

sorted(types_array, key=lambda x: len(x.get('key', None)))



Офлайн

#4 Июнь 3, 2010 06:42:03

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Сортировка массива при помощи выражений - генераторов.

JiMKE
А так я сортирую по длине ключа…
sorted(types_array, key=lambda x: len(x.get('key', None)))
Если ‘key’ нет в словаре получите TypeError, лучше так:
sorted(types_array, key=lambda x: len(x.get('key', ())))



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Июнь 3, 2010 11:16:40

JiMKE
От:
Зарегистрирован: 2010-06-02
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка массива при помощи выражений - генераторов.

Понял, принял, усвоил.
Спасибо=)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version