Как Pythonic способ переупорядочить список, состоящий из диктов? - PullRequest
4 голосов
/ 10 января 2011

У меня есть следующий список:

list = [{'nr' : 2, 'name': 'streamname'}, {'nr' : 3,'name': 'streamname'}, {'nr' : 1, 'name': 'streamname'}]

Итак, как бы мне изменить порядок, чтобы он стал таким эффективным в Python?

list = [{'nr' : 1, 'name': 'streamname'}, {'nr' : 2,'name': 'streamname'}, {'nr' : 3, 'name': 'streamname'}]

Я придумал использовать сортировку и создать лямбда-функцию для ее сортировки. Это хороший способ? И это эффективно?

list.sort(cmp=lambda x,y: cmp(x['nr'], y['nr']))

Ответы [ 2 ]

12 голосов
/ 10 января 2011

Нет, использование cmp= неэффективно.Вместо этого используйте key=.Вот так:

sorted(list, key=lambda x: x['nr'])

Причина проста: cmp сравнивает два объекта.Если ваш список длинный, есть много комбинаций из двух объектов, которые вы можете сравнить, поэтому список, который в два раза длиннее, занимает в два раза больше времени для сортировки.

Но с key этодело обстоит не так, и сортировка длинных списков, следовательно, намного быстрее.

Но основная причина использования key вместо cmp заключается в том, что его гораздо проще использовать.

Кроме того, sorted () имеет преимущество перед .sort(), может принимать любые итерируемые, в то время как .sort() работает со списками.

3 голосов
/ 11 января 2011
mylist.sort(key=operator.itemgetter('nr'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...