我有一个从数据库中的两个字段读取的值字典:字符串字段和数值字段。字符串字段是唯一的,因此它是字典的键。
我可以对键进行排序,但如何根据值进行排序?
注意:我已经在这里阅读了堆栈溢出问题 如何按字典的值对词典列表进行排序? 并且可能会更改我的代码以具有字典列表,但由于我并不真正需要字典列表,我想知道是否有更简单的解决方案可以按升序或降序排序。
网友回答:
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中相同,但它是一个实现细节。
>>> 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}
无法对字典进行排序,只能获取已排序的字典的表示形式。字典本质上是无序的,但其他类型的字典(如列表和元组)则不是。因此,您需要一个有序数据类型来表示排序值,这将是一个列表,可能是元组列表。
例如
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】栏目查找您需要的精美模板。