我是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']))
感谢您的批评!
答案 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
作为关键点提出了一个很好的观点。这也很可读。