• Python强化训练笔记(四)——字典的排序


    假如有学生成绩以字典顺序排列:{'Tom': 87, 'Jack': 90, 'Rose': 100.....}

    想要根据学生的成绩来进行排序,可以考虑使用sorted函数。但是sorted函数用在字典中,是仅对字典的键进行排序的,而不考虑值。

    那么我们可以通过zip函数,将字典转化为一个元组:

    >>> from random import randint
    >>> s = {x: randint(60, 100) for x in 'abcdef'}
    {'a': 72, 'c': 86, 'b': 100, 'e': 74, 'd': 89, 'f': 62}
    >>> s.keys()
    ['a', 'c', 'b', 'e', 'd', 'f']
    >>> s.values()
    [72, 86, 100, 74, 89, 62]
    # 这里有个小技巧,我们可以使用s.iterkeys()和s.itervalues()来提高程序的运行效率
    
    >>> zip(s.values(), s.keys())
    [(72, 'a'), (86, 'c'), (100, 'b'), (74, 'e'), (89, 'd'), (62, 'f')]
    >>> sorted(zip(s.values(), s.keys()))
    [(62, 'f'), (72, 'a'), (74, 'e'), (86, 'c'), (89, 'd'), (100, 'b')]

    另外一种方法,可以直接使用sorted的key参数,来指定排序的依据。

    >>> sorted(s.iteritems(), key=lambda x : x[1])
    [('f', 62), ('a', 72), ('e', 74), ('c', 86), ('d', 89), ('b', 100)]

    在本节中,这些小技巧要记住:

    得到字典对象的键,值,键值对的方法是

    dict.keys()

    dict.values()

    dict.items()

    以上三种方法返回的都是列表,是比较占用资源的。如果需要进行优化,那么可以使用:

    dict.iterkeys()

    dict.itervalues()

    dict.iteritems()

    将他们变为生成器。

  • 相关阅读:
    关于扩展欧几里得算法___基础,基础中的基础
    bzoj 2152聪聪可可
    poj1741 树上的点分治
    POJ1201 区间
    codevs 2756树上的路径
    zoj1260 king
    栈与队列应用:迷宫问题(DFS非最短路径)
    估值为一亿的AI核心代码
    栈与队列应用:计算前缀表达式的值
    栈与队列:循环队列算法+可执行代码
  • 原文地址:https://www.cnblogs.com/shiyu404/p/5942298.html
Copyright © 2020-2023  润新知