优草派  >   Python

python的dict怎么排序?

周文博            来源:优草派

Python语言中的dict是一种无序的键值对数据结构,虽然它不支持排序,但是我们可以通过一些方法实现对dict进行排序,本篇文章将从多个角度为大家介绍如何对python的dict进行排序。

python的dict怎么排序?

一、使用sorted函数

sorted函数可以对Python任何可迭代对象进行排序,并且它有一个key参数,可以指定排序的依据,因此,我们可以将key指定为我们想要排序的字典的键即可,具体实现如下:

``` python

import pprint

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

pprint.pprint(sorted(x.items(), key=lambda kv: kv[0]))

pprint.pprint(sorted(x.items(), key=lambda kv: kv[1]))

```

其中,第一个sorted函数使用dict的键进行排序,第二个sorted函数使用dict的值进行排序,需要注意的是,这种方法只返回排好序的键值对列表,如果需要重新生成一个有序的字典,我们还需要通过collections模块中的OrderedDict来实现:

``` python

import collections

import pprint

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

ordered_x_1 = collections.OrderedDict(sorted(x.items(), key=lambda kv: kv[0]))

ordered_x_2 = collections.OrderedDict(sorted(x.items(), key=lambda kv: kv[1]))

pprint.pprint(ordered_x_1)

pprint.pprint(ordered_x_2)

```

二、使用operator模块的itemgetter函数

operator模块中的itemgetter函数可以用于获取序列中的某个元素,因此我们可以使用它来对字典进行排序。具体实现如下:

``` python

import pprint

import operator

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

pprint.pprint(sorted(x.items(), key=operator.itemgetter(0)))

pprint.pprint(sorted(x.items(), key=operator.itemgetter(1)))

```

此处同样使用了sorted函数,只不过将key参数指定为了operator.itemgetter函数。

三、使用zip函数

我们还可以使用zip函数,将字典的键和值分别存储在两个列表中,然后使用zip函数将它们组合起来,并进行排序,具体实现如下:

``` python

import pprint

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

keys = list(x.keys())

values = list(x.values())

pprint.pprint(sorted(zip(keys, values)))

```

四、通过pandas库排序

pandas是Python中著名的数据处理库,它提供了很多数据处理方法,也可以用于对字典进行排序,具体实现如下:

``` python

import pandas as pd

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

s = pd.Series(x)

print(s.sort_values())

```

需要注意的是,s.sort_values()返回的是一个Series类型的新对象,如果需要生成有序的字典,我们还需要通过to_dict()方法转换一下:

``` python

import pandas as pd

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

s = pd.Series(x)

print(s.sort_values().to_dict())

```

除了上述方法外,还有其他一些方法可以对Python的dict进行排序,例如使用heapq.nlargest函数等,但是这些方法比较麻烦,一般情况下我们使用上面介绍的几种方法就可以满足需求了。

【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行