python高度な辞書ソート

1400 ワード

実例列:あるクラスの数学の成績は辞書の形式で保存されています:{'Tom':88,'Jack':90,'Rose':100...}成績によって順位をつけたい.
  • 方法1:zip関数によって、辞書を1つのメタグループに変換することができる:
  • In [1]: from random import randint
    
    In [2]: s = {x: randint(60, 100) for x in 'ABCDEF'}
    
    In [3]: s
    Out[3]: {'A': 87, 'B': 99, 'C': 62, 'D': 67, 'E': 97, 'F': 89}
    
    In [4]: s.keys()
    Out[4]: ['A', 'C', 'B', 'E', 'D', 'F']
    
    In [5]: s.values()
    Out[5]: [87, 62, 99, 97, 67, 89]
    
    #    :    s.iterkeys() s.itervalues()          
    
    In [6]: zip(s.itervalues(), s.iterkeys())
    Out[6]: [(87, 'A'), (62, 'C'), (99, 'B'), (97, 'E'), (67, 'D'), (89, 'F')]
    
    In [7]: sorted(zip(s.itervalues(), s.iterkeys()))
    Out[7]: [(62, 'C'), (67, 'D'), (87, 'A'), (89, 'F'), (97, 'E'), (99, 'B')]
    
  • メソッド2:組み込まれたsorted関数のkeyパラメータを使用して、ソートの根拠を指定します.デフォルトのsorted関数は辞書で使用され、値を考慮せずに辞書のキーのみをソートします.
  • In [8]: sorted(s)
    Out[8]: ['A', 'B', 'C', 'D', 'E', 'F']
    
    In [9]: sorted(s.iteritems(), key=lambda x: x[1])
    Out[9]: [('C', 62), ('D', 67), ('A', 87), ('F', 89), ('E', 97), ('B', 99)]