排序一组dicts

时间:2010-01-08 15:02:34

标签: python sorting

我是Python的新手,如果我正确地做这件事,我很好奇。我有一个dicts元组(来自数据库调用):

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 个答案:

答案 0 :(得分:7)

您可以执行以下操作:

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

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

修改 我得到了companyid而不是companyname。纠正了这个错误。

答案 1 :(得分: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}]

正如您在查看sorted {{1}}的第一个参数时所看到的那样,可能是任何可迭代的,所以您甚至可能不需要创建元组。

答案 2 :(得分:2)

没关系,但您可能需要考虑sorting by keys

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

代替。它更容易阅读,对x['companyname']的呼叫也会减少。

@extraneon对使用operator.itemgetter作为关键点提出了一个很好的观点。这也很可读。