python 字典按值排序

Python 字典按值排序

_x000D_

Python 字典是一种非常常用的数据类型,它可以存储键值对,而且键是唯一的。有时候我们需要按照字典中的值进行排序,这时候就需要用到 Python 字典按值排序。Python 提供了多种方法来实现字典按值排序,下面就让我们来一一了解。

_x000D_

方法一:使用 sorted 函数

_x000D_

sorted 函数可以对可迭代对象进行排序,它可以接受一个 key 参数,用于指定排序的依据。我们可以通过将字典转换为元组列表来实现字典按值排序。

_x000D_

`python

_x000D_

d = {'a': 3, 'b': 1, 'c': 2}

_x000D_

sorted_d = sorted(d.items(), key=lambda x: x[1])

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

[('b', 1), ('c', 2), ('a', 3)]

_x000D_ _x000D_

方法二:使用 operator 模块

_x000D_

operator 模块提供了多个函数,可以方便地对序列进行操作。其中 itemgetter 函数可以用于获取字典中的值,再对值进行排序。

_x000D_

`python

_x000D_

import operator

_x000D_

d = {'a': 3, 'b': 1, 'c': 2}

_x000D_

sorted_d = sorted(d.items(), key=operator.itemgetter(1))

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

[('b', 1), ('c', 2), ('a', 3)]

_x000D_ _x000D_

方法三:使用 lambda 表达式

_x000D_

lambda 表达式可以用于创建匿名函数,可以在 sorted 函数中直接使用。

_x000D_

`python

_x000D_

d = {'a': 3, 'b': 1, 'c': 2}

_x000D_

sorted_d = sorted(d.items(), key=lambda x: x[1])

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

[('b', 1), ('c', 2), ('a', 3)]

_x000D_ _x000D_

方法四:使用 collections 模块的 OrderedDict 类

_x000D_

OrderedDict 类是一个有序字典,可以按照插入顺序来遍历。我们可以通过将字典转换为 OrderedDict 对象,再按照值进行排序。

_x000D_

`python

_x000D_

from collections import OrderedDict

_x000D_

d = {'a': 3, 'b': 1, 'c': 2}

_x000D_

sorted_d = OrderedDict(sorted(d.items(), key=lambda x: x[1]))

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

OrderedDict([('b', 1), ('c', 2), ('a', 3)])

_x000D_ _x000D_

扩展问答

_x000D_

1. 字典按值排序和字典按键排序有什么区别?

_x000D_

字典按键排序是按照键的顺序进行排序,而字典按值排序是按照值的大小进行排序。在字典按键排序中,键是唯一的,而在字典按值排序中,值可以重复。

_x000D_

2. 如何实现字典按值降序排序?

_x000D_

可以在 sorted 函数中指定 reverse 参数为 True。

_x000D_

`python

_x000D_

d = {'a': 3, 'b': 1, 'c': 2}

_x000D_

sorted_d = sorted(d.items(), key=lambda x: x[1], reverse=True)

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

[('a', 3), ('c', 2), ('b', 1)]

_x000D_ _x000D_

3. 如果字典中有多个值相等,如何保留原来的顺序?

_x000D_

可以使用 collections 模块的 defaultdict 类和列表来实现。首先将字典转换为 defaultdict 对象,并将值相等的键放入同一个列表中,然后对列表进行排序。

_x000D_

`python

_x000D_

from collections import defaultdict

_x000D_

d = {'a': 3, 'b': 2, 'c': 2, 'd': 1}

_x000D_

sorted_d = defaultdict(list)

_x000D_

for k, v in d.items():

_x000D_

sorted_d[v].append(k)

_x000D_

result = []

_x000D_

for k in sorted(sorted_d.keys(), reverse=True):

_x000D_

result.extend(sorted(sorted_d[k]))

_x000D_

print(result)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

['a', 'c', 'b', 'd']

_x000D_ _x000D_

4. 如果字典中有 None 值,如何实现字典按值排序?

_x000D_

可以在 sorted 函数中指定 key 参数,将 None 值转换为一个较小的值。

_x000D_

`python

_x000D_

d = {'a': 3, 'b': None, 'c': 2}

_x000D_

sorted_d = sorted(d.items(), key=lambda x: x[1] if x[1] is not None else float('-inf'))

_x000D_

print(sorted_d)

_x000D_ _x000D_

输出结果为:

_x000D_ _x000D_

[('c', 2), ('a', 3), ('b', None)]

_x000D_ _x000D_

Python 字典按值排序是一个常见的需求,本文介绍了多种实现方法,希望能够帮助大家解决问题。本文还扩展了一些与字典按值排序相关的问答,希望能够对大家有所启发。

_x000D_
申请14天超长免费试听资格
获取500G教程资料
姓名
电话
课程
立即申请