代码之家  ›  专栏  ›  技术社区  ›  Wes

对dict的元组进行排序

  •  3
  • Wes  · 技术社区  · 15 年前

    我对python是个新手,我很好奇自己是否做得对。我有一组听写(来自数据库调用):

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

    我想按CompanyName分类。有没有比这更正确的方法?

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

    谢谢你的批评!

    3 回复  |  直到 15 年前
        1
  •  7
  •   extraneon    15 年前

    你可以这样做:

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

    我觉得这是一个品味问题。

    编辑 我得到了 companyid 代替 companyname . 修正了那个错误。

        2
  •  3
  •   SilentGhost    15 年前
    >>> 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 第一个论点 排序的 可能是任何一个iterable,所以甚至不需要创建tuple。

        3
  •  2
  •   Blair Conrad    15 年前

    没关系,不过你可能想考虑一下 sorting by keys :

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

    相反。读起来容易一点,打电话的人也会少一点。 x['companyname'] .

    @Extranon在使用方面很有意义 operator.itemgetter 作为你的钥匙。这也很可读。