Сортировка кортежей - PullRequest
       4

Сортировка кортежей

3 голосов
/ 08 января 2010

Я новичок в Python, и мне любопытно, правильно ли я это делаю. У меня есть набор слов (из вызова базы данных):

companies = ( { 'companyid': 1, 'companyname': 'Company C' },
              { 'companyid': 2, 'companyname': 'Company A' },
              { 'companyid': 3, 'companyname': 'Company B' } )

Я хочу отсортировать это по названию компании. Есть ли более правильный способ сделать это?

sortcompanies = list(companies)
sortcompanies.sort(lambda x,y: cmp(x['companyname'],y['companyname']))

Спасибо за вашу критику!

Ответы [ 3 ]

7 голосов
/ 08 января 2010

Вы можете сделать что-то вроде:

import operator
...
sortcompanies.sort(key=operator.itemgetter("companyname"))

Я думаю, что это дело вкуса.

EDIT Я получил companyid вместо companyname. Исправил эту ошибку.

3 голосов
/ 08 января 2010
>>> companies = ( { 'companyid': 1, 'companyname': 'Company C' },
              { 'companyid': 2, 'companyname': 'Company A' },
              { 'companyid': 3, 'companyname': 'Company B' } )

>>> sorted(companies, key=lambda x: x['companyname'])
[{'companyname': 'Company A', 'companyid': 2}, {'companyname': 'Company B', 'companyid': 3}, {'companyname': 'Company C', 'companyid': 1}]

Как вы увидите при чтении документов sorted, первый аргумент sorted может быть любым итеративным, поэтому вам даже не нужно создавать кортеж.

2 голосов
/ 08 января 2010

Это нормально, но вы можете рассмотреть сортировку по ключам :

sortcompanies.sort(key=lambda x:x['companyname'])

вместо этого. Его немного легче читать, и звонков на x['companyname'].

будет меньше.

@ extraneon хорошо подходит для использования operator.itemgetter в качестве ключа. Это также довольно читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...