zoukankan      html  css  js  c++  java
  • 【python cookbook】【数据结构与算法】13.通过公共键对字典列表排序

    问题:想根据一个或多个字典中的值来对列表排序

    解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。

    # Sort a list of a dicts on a common key
    
    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}
    ]
    
    from operator import itemgetter
    
    rows_by_fname = sorted(rows, key=itemgetter('fname'))
    rows_by_uid = sorted(rows, key=itemgetter('uid'))
    
    from pprint import pprint
    
    print("Sorted by fname:")
    pprint(rows_by_fname)  #pprint模块的pprint()提供了打印出任何python数据结构类和方法。
    
    print("Sorted by uid:")
    pprint(rows_by_uid)
    
    rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
    print("Sorted by lname,fname:")
    pprint(rows_by_lfname)
    >>> ================================ RESTART ================================
    >>> 
    Sorted by fname:
    [{'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
    Sorted by uid:
    [{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
     {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
     {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}]
    Sorted by lname,fname:
    [{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
     {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
     {'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
     {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}]
    >>> 

    补充说明:

    有时候会利用lambda表达式来取代itemgetter()的功能:但是利用itemgetter()会运行的更快一些,所以考虑性能的话,应该使用itemgetter()。

    rows_by_fname = sorted(rows, key=lambda r:r['fname'])
    rows_by_uid = sorted(rows, key=lambda r:r['uid'])

    最后,本节展示的技术同样适用于min()和max()这样的函数:

    >>> min(rows, key=itemgetter('uid'))
    {'lname': 'Cleese', 'fname': 'John', 'uid': 1001}
    >>> max(rows, key=itemgetter('uid'))
    {'lname': 'Jones', 'fname': 'Big', 'uid': 1004}
    >>> itemgetter('uid')
    <operator.itemgetter object at 0x023532F0>
    >>>
  • 相关阅读:
    虚拟机中按键切回windows系统界面快捷键
    余数
    质数(素数)判断代码实现
    =excel========》函数使用
    python 正则表达式规则
    linux常用命令详解
    c指针
    visual studio 2015 开发时常见问题的解决方案
    python装饰器
    构造方法
  • 原文地址:https://www.cnblogs.com/apple2016/p/5747116.html
Copyright © 2011-2022 走看看