2024-04-19 07:24:22 发布
网友
我有一个从数据库中的两个字段读取值的字典:字符串字段和数字字段。字符串字段是唯一的,所以这是字典的键。
我可以按键排序,但如何根据值排序?
注意:我在这里读过堆栈溢出问题,可能会将我的代码更改为有一个字典列表,但是由于我不需要字典列表,所以我想知道是否有一个更简单的解决方案可以按升序或降序排序。
sorted(dict1, key=dict1.get)
嗯,实际上可以做一个“按字典值排序”。最近我不得不在一个代码高尔夫(堆栈溢出问题Code golf: Word frequency chart)。简而言之,问题是这样的:给定一个文本,计算每个单词出现的频率,并显示一个按频率递减排序的前几个单词的列表。
如果您构造了一个字典,其中单词作为键,每个单词的出现次数作为值,则此处简化为:
from collections import defaultdict d = defaultdict(int) for w in text.split(): d[w] += 1
然后,您可以得到一个单词列表,按与sorted(d, key=d.get)一起使用的频率排序-排序将在字典键上迭代,使用单词出现次数作为排序键。
sorted(d, key=d.get)
for w in sorted(d, key=d.get, reverse=True): print w, d[w]
我写这篇详细的解释是为了说明人们通常所说的“我可以很容易地按关键字对词典进行排序,但如何按值排序”的意思,而且我认为OP试图解决这样一个问题。解决方案是根据值对键进行排序,如上图所示。
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}
无法对词典进行排序,只能获取已排序词典的表示形式。字典本质上是无顺序的,但其他类型,如列表和元组,则不是。因此,您需要一个有序的数据类型来表示已排序的值,这可能是一个元组列表。
例如
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。
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中,因为不允许解包,[1]我们可以使用
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0} sorted_x = sorted(x.items(), key=lambda kv: kv[1])
如果希望输出为dict,可以使用^{}:
import collections sorted_dict = collections.OrderedDict(sorted_x)
您可以使用:
sorted(d.items(), key=lambda x: x[1])
这将按字典中每个条目的值从最小到最大对字典进行排序。
要按降序排序,只需添加reverse=True:
reverse=True
sorted(d.items(), key=lambda x: x[1], reverse=True)
简单到:
sorted(dict1, key=dict1.get)
嗯,实际上可以做一个“按字典值排序”。最近我不得不在一个代码高尔夫(堆栈溢出问题Code golf: Word frequency chart)。简而言之,问题是这样的:给定一个文本,计算每个单词出现的频率,并显示一个按频率递减排序的前几个单词的列表。
如果您构造了一个字典,其中单词作为键,每个单词的出现次数作为值,则此处简化为:
然后,您可以得到一个单词列表,按与
sorted(d, key=d.get)
一起使用的频率排序-排序将在字典键上迭代,使用单词出现次数作为排序键。我写这篇详细的解释是为了说明人们通常所说的“我可以很容易地按关键字对词典进行排序,但如何按值排序”的意思,而且我认为OP试图解决这样一个问题。解决方案是根据值对键进行排序,如上图所示。
Python3.6+
较老的Python
无法对词典进行排序,只能获取已排序词典的表示形式。字典本质上是无顺序的,但其他类型,如列表和元组,则不是。因此,您需要一个有序的数据类型来表示已排序的值,这可能是一个元组列表。
例如
sorted_x
将是按每个元组中的第二个元素排序的元组列表。dict(sorted_x) == x
。对于那些希望按键而不是值排序的人:
在Python3中,因为不允许解包,[1]我们可以使用
如果希望输出为dict,可以使用^{} :
您可以使用:
这将按字典中每个条目的值从最小到最大对字典进行排序。
要按降序排序,只需添加
reverse=True
:相关问题 更多 >
编程相关推荐