首页 > 其他分享 >如何按值对字典进行排序?

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

时间:2023-10-27 11:45:26浏览次数:34  
标签:按值 items 列表 key sorted 排序 字典

内容来自 DOC https://q.houxu6.top/?s=如何按值对字典进行排序?

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

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

注意:我在这里阅读了 Stack Overflow 问题 如何根据字典的值对字典列表进行排序? 并且可能可以更改我的代码以拥有一个字典列表,但由于我真的不需要一个字典列表,我想知道是否有一种更简单的解决方案来按照升序或降序排序。


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)

标签:按值,items,列表,key,sorted,排序,字典
From: https://www.cnblogs.com/xiaomandujia/p/17791910.html

相关文章

  • python 字符串str与字典dict转换
    目录python字符串str与字典dict转换字典转字符串字符串转字典带引号不带引号python字符串str与字典dict转换字典转字符串c={'a':'1','b':'1'}b=str(c)print(b,type(b))字符串转字典字符串转字典分两种情况,需要根据你的字符串内容是否带引号决定,如#带引号c={'a......
  • 快速排序C实现
    在数据结构中的快速排序实现,未将原数组排序为递增或递减的序列,该C语言通过指针将原数组进行了改变。low和high的数值交换:voidSwap(int*a,int*b){intp=*b;*b=*a;*a=p;}Partition(分区函数):通过内层while可看出快速排序不是稳定排序算法intPartition(i......
  • Java map详解 - 用法、遍历、排序、常用API等
    java.util中的集合类包含Java中某些最常用的类。最常用的集合类是List和Map。Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。本文主要介绍javamap的初始化、用法、map的四种常用的遍历方式、map的排序以及常用ap......
  • 【排序算法】冒泡排序法(C语言)——轻松拿下!
    文章目录一、冒泡排序的原理1.1算法思维:1.2动态图演示:二、实例讲解2.1图解冒泡:第一趟:第二趟第三趟第四趟三、代码讲解3.1定义变量:3.2使用双重循环3.3比较3.4红蓝墨水交换3.5遍历输出代码示例:四、总结一、冒泡排序的原理冒泡排序是一种简单的排序算法,它也是一种稳定的排序方法。其......
  • MySQL建数据库排序规则选择
    MySQL建数据库排序规则选择引言在MySQL数据库中,选择适合的排序规则对于数据的存储和检索非常重要。排序规则决定了字符比较的方式,影响数据库的数据排序和查询结果。本文将介绍MySQL中常见的排序规则,并提供相应的代码示例来帮助读者理解和选择适合自己需求的排序规则。排序规则......
  • Java 练习题02 (包装类 (对字符串进行排序))
    有一个字符串“101,87,88,87,98”对数字由小到大排序。importjava.util.Arrays;publicclassDemo01{publicstaticvoidmain(String[]args){Stringspa="101,87,88,87,98";//1.分割每个数字String[]str=spa.split(",");//2.定义int类型数......
  • C# 字典Dictionary 深拷贝方法
    C#的字典暂时不支持默认的Clone方法,网上的不少字典Dictionary克隆方法大多是浅拷贝方法,例如:1///<summary>2///需要修改的文件信息,用于分布式提取数据3///</summary>4publicclassChangeScriptInformation5{6publicstringfileName;//......
  • 使用pandas模块将excel文档两列转换为字典
    一个名为err_code.xlsx的文件,打开里面内容是: 一共有几百行这样的数据。我们的需求是将其变为这种字典格式,key、value、和注释: 可以借助pandas模块来进行。脚本如下:importpandasaspddf=pd.read_excel('err_code.xlsx')countrymap=dict(zip(d......
  • Mysql、Oracle 中将汉字(中文)按照拼音首字母排序
    Mysql 将汉字(中文)按照拼音首字母排序ORDERBYCONVERT(表别名.字段名USINGgbk)COLLATEgbk_chinese_ciASC;例子select*from(select'嘉实资产'a,'000830'bunionselect'中金鼎益稳健3号单一资产管理计划'a,'002544'bunionselect......
  • P9771 HUSTFC 2023 排列排序问题 题解
    Question给出一个\(N\)个元素的排序\(a\),我们可以对排列进行一些操作将这个排列切割成若干个序列将其中一些序列翻转将这些序列连接起来得到一个新的排列需要让最后的排列有序Solution这个题的描述有点小问题理解应该是切一次,然后再反转合并,不可能会先合并再切再反转......