神刀安全网

Python 50问 [4]:如何对字典中的项根据其值的大小进行排序

常规场景

如某班的成绩以字典的形式存储为:{'Airing': 100, 'Penny': 70, 'Bili': 50},现根据其成绩的高低,对学生进行排名。

常规解法:使用zip将字典转成元组

sorted是一个内置的排序函数,可对列表进行排序。如:

sorted([3, 4, 66, 6])   # 返回 [3, 4, 6, 66]

那么如何对字典进行排序呢?

以下是操作流程:

  1. 利用zip将字典转化成元组
  2. 使用sorted函数进行排序

我们还是以场景中的案例为例:

d = {'Airing': 100, 'Penny': 70, 'Bili': 50}  # 如果直接对字典进行排序,会默认按照键进行排序 sorted(d)  # => ['Airing', 'Bili', 'Penny']  # 所以将字典转成元组的列表处理 # 元组值前键后,会优先按照值排序 # 即转成 => [(100, 'Airing'), (70, 'Penny'), (50, 'Bili')]  # 1. 利用`zip`将字典转化成元组 f = zip(d.values(), d.keys()) # => [(100, 'Airing'), (70, 'Penny'), (50, 'Bili')]  # 注:如果字典的项很多的话,建议使用其迭代版本(Python2),可以对内存进行优化 f = zip(d.itervalues(), d.iterkeys()) # 结果相同  # 2. 使用`sorted`函数进行排序 sorted(f) # 成绩由小到大 => [(50, 'Bili'), (70, 'Penny'), (100, 'Airing')]

使用sorted函数的 key 参数

那么 Python 中有没有更加方便的解决方案呢?按照套路来说,是有的。那就是使用sorted函数的 key 参数。

d = {'Airing': 100, 'Penny': 70, 'Bili': 50}  d.items()  # => [('Airing', 100), ('Penny', 70), ('Bili', 50)] # 此时键在前,值在后,没法直接使用 sorted 函数 # 就需要使用 sorted 函数的 key 参数  sorted(d.items(), key=lambda x : x[1]) # 规定按照第1项(0开始)进行排序 # 成绩由小到大 => [(50, 'Bili'), (70, 'Penny'), (100, 'Airing')]

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Python 50问 [4]:如何对字典中的项根据其值的大小进行排序

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址