详解Python 字典排序

  • Post category:Python

Python 字典是一种 key-value 存储的数据结构,它的 key 是唯一的,且不可变的。在对字典进行排序时,我们往往是将其 key 或 value 进行排序。

一、按 key 排序

对字典按 key 排序可以使用 Python 内置的 sorted() 函数和字典的 items() 方法。items() 将字典转化为 (key, value) 组成的列表,sorted() 对该列表进行排序。

示例1:

poetry = {'李白': '静夜思', '杜甫': '登高', '白居易': '赋得古原草送别'}
sorted_poetry = sorted(poetry.items(), key=lambda item: item[0])
print(sorted_poetry)

输出结果:[(‘白居易’, ‘赋得古原草送别’), (‘李白’, ‘静夜思’), (‘杜甫’, ‘登高’)]

示例2:

根据字典键 key 排序,使用 collections 的 OrderedDict。

from collections import OrderedDict
poetry = {'李白': '静夜思', '杜甫': '登高', '白居易': '赋得古原草送别'}
sorted_poetry = OrderedDict(sorted(poetry.items(), key=lambda item: item[0]))
print(sorted_poetry)

输出结果:OrderedDict([(‘白居易’, ‘赋得古原草送别’), (‘李白’, ‘静夜思’), (‘杜甫’, ‘登高’)])

二、按 value 排序

对字典按 value 排序需要借助 Python 内置的 sorted() 函数和字典的 values() 方法。values() 将字典的值转化为列表,sorted() 对该列表进行排序,再使用列表推导式构建原字典的 ({key: value}) 组成的列表。

示例1:

poetry = {'李白': '静夜思', '杜甫': '登高', '白居易': '赋得古原草送别'}
sorted_poetry = [{k: v} for v, k in sorted(poetry.values(), key=lambda item: item)]
print(sorted_poetry)

输出结果:[{‘赋得古原草送别’: ‘白居易’}, {‘登高’: ‘杜甫’}, {‘静夜思’: ‘李白’}]

示例2:

根据字典值 value 排序,使用 collections 的 OrderedDict。

from collections import OrderedDict
poetry = {'李白': '静夜思', '杜甫': '登高', '白居易': '赋得古原草送别'}
sorted_poetry = OrderedDict(sorted(poetry.items(), key=lambda item: item[1]))
print(sorted_poetry)

输出结果:OrderedDict([(‘李白’, ‘静夜思’), (‘杜甫’, ‘登高’), (‘白居易’, ‘赋得古原草送别’)])