我有一个从数据库的两个字段中读取的值的字典:字符串字段和数字字段。字符串字段是唯一的 ,因此这是字典的键 。

我可以对键进行排序,但是如何根据值进行排序?

注意:我在这里阅读了堆栈溢出问题,可能会更改我的代码以包含字典列表 ,但是由于我实际上并不需要字典列表,因此我想知道是否有更简单的解决方案来按升序或降序进行排序。

 解决方案:

Python 3.7+或CPython 3.6

字典保留Python 3.7+中的插入顺序。在CPython 3.6中相同,

>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

或者

>>> dict(sorted(x.items(), key=lambda item: item[1]))
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

较旧的Python

无法对字典进行排序 ,只能获得已排序字典的表示形式 。字典本质上是无序的 ,但其他类型(例如列表和元组)不是。因此,您需要一种有序的数据类型来表示排序后的值,这将是一个列表-可能是一个元组列表。

例如 ,

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))

sorted_x
将是按每个元组中第二个元素排序的元组列表 。
dict(sorted_x) == x
。

对于那些希望对键而不是值进行排序的人:

import operator
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=operator.itemgetter(0))

在Python3中我们可以使用

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
sorted_x = sorted(x.items(), key=lambda kv: kv[1])

如果要将输出作为字典,则可以使用

collections.OrderedDict

import collections

sorted_dict = collections.OrderedDict(sorted_x)


本文首发于python黑洞网,博客园同步跟新

 




文章来源于网络,如有侵权请联系站长QQ61910465删除
本文版权归去快排Seo www.SEOgurublog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▷61910465