2010-01-08 59 views
3

我是新来的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'])) 

感谢您的批评!

+0

如果2家公司有可能拥有相同的名称,则可能会根据初始订购的不同进行最终排序。我不知道这是否在您的应用程序中很重要。 – 2010-01-08 15:12:17

+0

好点,这应该不会发生在我的应用程序,但这是我会记住的。 – Wes 2010-01-08 16:05:27

回答

7

你可以这样做:

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

我认为这是一个品味的问题。

编辑 我在companyname代替了companyid。纠正了那个错误。

+0

我比我在做的事更喜欢这个。谢谢! – Wes 2010-01-08 16:10:24

2

这很好,但你可能要考虑sorting by keys

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

代替。阅读起来更容易一些,并且x['companyname']的呼叫将会减少。

@extraneon关于使用operator.itemgetter作为您的关键点很有用。这也很可读。

3
>>> 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}] 

为读docs of sorted第一个参数时至sorted可能是可迭代的,你会看到,所以您可能不需要甚至创建的元组。