zoukankan      html  css  js  c++  java
  • itemgetter和groupby

    一. itemgetter的使用方法

     itemgetter()返回一个指定列表下标或者字典键的函数,通过这个返回的函数作用到对象上,获得才能取得相应的值

     1. 排序字典列表的一个例子

    from operator import itemgetter
    rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
    ]
    
    #按名来排序
    rows_by_fname = sorted(rows, key=itemgetter('fname'))
    
    #按UID排序
    rows_by_uid = sorted(rows, key=itemgetter('uid'))
    
    #也支持按多个条件排序
    rows_by_flname = sorted(rows, key=itemgetter('fname', lname'))

    2. itemgetter在一般列表中的用法

    >>> from operator import itemgetter
    >>> a = [10,20,30,40]
    >>> x = itemgetter(1)
    >>> x(a)
    20
    >>> y = itemgetter(1,0)
    >>> y(a)
    (20, 10)

     

    3. itemgetter在元组中的用法,其中key为一个函数或者lambda函数,所以itemgetter可以用来当key的参数

    >>> a = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    
    #按第二个域和第三个域进行排序
    >>> sorted(a, key=itemgetter(1,2))
    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
    
    #按第三个域方向排序
    >>> sorted(a, key=itemgetter(2), reverse=True)
    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

    二. 使用itertools.groupby() :对字典中的某一个字段分组

    rows = [
    {'address': '5412 N CLARK', 'date': '07/01/2012'},
    {'address': '5148 N CLARK', 'date': '07/04/2012'},
    {'address': '5800 E 58TH', 'date': '07/02/2012'},
    {'address': '2122 N CLARK', 'date': '07/03/2012'},
    {'address': '5645 N RAVENSWOOD', 'date': '07/02/2012'},
    {'address': '1060 W ADDISON', 'date': '07/02/2012'},
    {'address': '4801 N BROADWAY', 'date': '07/01/2012'},
    {'address': '1039 W GRANVILLE', 'date': '07/04/2012'},
    ]
    
    from operator import itemgetter
    from itertools import groupby
    # Sort by the desired field first
    rows.sort(key=itemgetter('date'))
    # Iterate in groups
    for date, items in groupby(rows, key=itemgetter('date')):
        print(date)
        for i in items:
            print(' ', i)

    输出结果如下

    07/01/2012
     {'date': '07/01/2012', 'address': '5412 N CLARK'}
     {'date': '07/01/2012', 'address': '4801 N BROADWAY'}
    07/02/2012
     {'date': '07/02/2012', 'address': '5800 E 58TH'}
     {'date': '07/02/2012', 'address': '5645 N RAVENSWOOD'}
     {'date': '07/02/2012', 'address': '1060 W ADDISON'}
    07/03/2012
     {'date': '07/03/2012', 'address': '2122 N CLARK'}
    07/04/2012
     {'date': '07/04/2012', 'address': '5148 N CLARK'}
     {'date': '07/04/2012', 'address': '1039 W GRANVILLE'}
  • 相关阅读:
    经常出现null错误之tostring
    删除sql计划 调用的目标发生了异常。 (mscorlib) 其他信息: 用户 'sa' 登录失败。
    js打印保存用户输入的内容
    vs调试有时能进去后台,有时不能进去
    vs当前不会命中断点,还没有为该文档加载任何符号
    动软数据库文档生成器 失败错误码HRESULT:0x80010105 解决办法
    关于ckeditor过滤掉html样式标签之我见
    快速批量插入sqlserver方法之我见
    vs找不到svn源代码管理插件之我见
    有关大学,有关爱好,有关学习,有关奋斗,有关理想:大学应该干些什么?我大学三年以来的感悟
  • 原文地址:https://www.cnblogs.com/regit/p/9397197.html
Copyright © 2011-2022 走看看