Форум сайта python.su
Добрый день.
Мне очень интересно, возможно ли упростить сортировку списка словарей при помощи выражений - генераторов?
Как вариант, я реализовал это классическим методом пузырька.
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
Офлайн
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'}]
Офлайн
Ой - ё! Как элегантно!
Большое спасибо. А так я сортирую по длине ключа…
sorted(types_array, key=lambda x: len(x.get('key', None)))
Офлайн
JiMKEЕсли ‘key’ нет в словаре получите TypeError, лучше так:
А так я сортирую по длине ключа…sorted(types_array, key=lambda x: len(x.get('key', None)))
sorted(types_array, key=lambda x: len(x.get('key', ())))
Офлайн
Понял, принял, усвоил.
Спасибо=)
Офлайн