zoukankan      html  css  js  c++  java
  • 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()

    将他们变为生成器。

  • 相关阅读:
    PAT 1005. 继续(3n+1)猜想 (25)
    PAT 1004. 成绩排名 (20)
    android小游戏 飞机躲子弹
    PAT 1004. 成绩排名 (20) JAVA
    PAT 1003. 我要通过!(20) JAVA
    PAT 1003. 我要通过!(20)
    PAT 1002. 写出这个数 (20)
    NEERC, Northern Subregional Contest 2012 B 乱搞or搜索
    SGU 167 未解 dp
    Bucharest, Romania 2013 A Russian Dolls 贪心
  • 原文地址:https://www.cnblogs.com/shiyu404/p/5942298.html
Copyright © 2011-2022 走看看