首页 > Python > 在Python如何按值对字典进行排序?

在Python如何按值对字典进行排序?

上一篇 下一篇

网友问题:

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

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

注意:我已经在这里阅读了堆栈溢出问题 如何按字典的值对词典列表进行排序? 并且可能会更改我的代码以具有字典列表,但由于我并不真正需要字典列表,我想知道是否有更简单的解决方案可以按升序或降序排序。

分割线

网友回答:

简单如下:sorted(dict1, key=dict1.get)

好吧,实际上可以进行“按字典值排序”。最近我不得不在代码高尔夫(堆栈溢出问题代码高尔夫:词频图)中这样做。删节后,问题是这样的:给定一个文本,计算每个单词出现的频率,并显示一个顶级单词的列表,按频率递减排序。

如果构造一个字典,将单词作为键,并将每个单词的出现次数作为值,则简化为:

from collections import defaultdict
d = defaultdict(int)
for w in text.split():
    d[w] += 1

然后,您可以获得单词列表,按使用频率排序 – 排序遍历字典键,使用单词出现次数作为排序键。sorted(d, key=d.get)

for w in sorted(d, key=d.get, reverse=True):
    print(w, d[w])

我写这个详细的解释是为了说明人们通常所说的“我可以轻松地按键对字典进行排序,但我如何按值排序”——我认为原始帖子试图解决这样一个问题。解决方案是根据值对键进行排序,如上所示。

分割线

网友回答:

您可以使用:

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

这将按字典中每个条目的值从最小到最大对字典进行排序。

要按降序排序,只需添加:reverse=True

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

输入:

d = {'one':1,'three':3,'five':5,'two':2,'four':4}
a = sorted(d.items(), key=lambda x: x[1])    
print(a)

输出:

[('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]

分割线

网友回答:

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如何按值对字典进行排序?】,大小是暂无信息,文档格式为.html,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 178次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 html
  • 文件大小 暂无信息
  • 上传时间 02-07
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信文章 响应式 单页式简历模板 微信模板 微信素材 自适应 html5 微信公众平台 企业网站 微信图片
您可能会喜欢的其他模板