2010-01-08 89 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可能是可迭代的,你會看到,所以您可能不需要甚至創建的元組。