如何在 Python 中按键对字典排序

Azaz Farooq 2023年10月10日
  1. Python 用 dict.keys() 方法对字典按键排序
  2. Python 用 dict.items() 方法按键对字典进行排序
  3. Python 用 OrderedDict() 方法按 key 对字典进行排序
  4. Python 按反向顺序对字典进行排序
  5. Python 用自定义 key 函数方法排序字典
如何在 Python 中按键对字典排序

Python 字典和哈希表一样,通过评估键的哈希值来保存条目,条目的顺序是无法预测的。本文将介绍如何在 Python 中按键对字典进行排序。

Python 用 dict.keys() 方法对字典按键排序

让我们以下面的字典为例。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}

dict.keys() 的输出是

dict_keys(["hello", "at", "test", "this"])

我们可以从这个无序的键列表中创建一个新的、有序的字典。

sorted(dict.keys())

输出:

['at', 'hello', 'test', 'this']

通过从字典中选择每个条目,我们可以对该排序列表重复进行排序。

for key in sorted(dict.keys()):
    print(key, " :: ", dict[key])

输出:

at  ::  23
hello  ::  56
test  ::  43
this  ::  43

Python 用 dict.items() 方法按键对字典进行排序

我们也可以在 Python 中用 dict.items() 方法按键对一个字典进行排序。

它将生成一个包含键值对的列表?

dict.items()

输出:

dict_items([('hello', 56), ('at', 23), ('test', 43), ('this', 43)])

我们可以通过下面的函数生成一个排列好的列表。它将根据键值对字典的条目进行排序。

sorted(dict.keys())

输出:

['at', 'hello', 'test', 'this']

现在,为了从字典中产生排序键值对,我们使用以下代码。

for elem in sorted(dict.items()):
    print(elem[0], " ::", elem[1])

输出:

at  :: 23
hello  :: 56
test  :: 43
this  :: 43

在复杂性方面,它比前面的方法更强大。因为我们在对可迭代列表进行排序后,不需要像 dict.key() 那样检查键值。

Python 用 OrderedDict() 方法按 key 对字典进行排序

另外,我们也可以使用 collections 模块对字典元素进行键值排序。

import collections

d = {2: 13, 1: 9, 4: 25, 3: 0}
result = collections.OrderedDict(sorted(d.items()))
print(result)

输出:

OrderedDict([(1, 9), (2, 13), (3, 0), (4, 25)])

Python 按反向顺序对字典进行排序

之前,我们按升序对字典项进行了排序。现在我们讨论一些按降序排列字典项的方法。

语法为:

sorted(iterable_sequence, reverse=True)

以下代码对字典项进行排序和反转。

dict = {"hello": 56, "at": 23, "test": 43, "this": 43}
for elem in sorted(dict.items(), reverse=True):
    print(elem[0], " ::", elem[1])

参数 reverse=true 确保排序后的字典是反向的。

输出:

this  :: 43

test  :: 43

hello  :: 56

at  :: 23

Python 用自定义 key 函数方法排序字典

该方法将通过使用 key 字符串的长度对字典元素进行排序。

sorted(iterable_sequence, key=Function)

返回字符串大小的 lambda 函数被赋予 key 参数。

listofTuples = sorted(dict.items() ,  key=lambda x: len (x[0] ) )
for elem in listofTuples :
    print(elem[0] , " ::" , elem[1] )

输出:

at  :: 23

test  :: 43

this  :: 43

hello  :: 56

相关文章 - Python Dictionary