You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对字典的值排序?以及如何按多值排序字典并返回含键的有序字典?

字典排序问题解答

1. 如何对字典的值进行排序?

要对字典的值排序,核心是用Python内置的sorted()函数,搭配字典的items()方法拿到键值对,再通过key参数指定排序依据就行。举个简单例子:

# 示例字典
simple_dict = {'apple': 5, 'banana': 2, 'cherry': 7}
# 按值升序排序,得到键值对列表
sorted_pairs = sorted(simple_dict.items(), key=lambda item: item[1])
# 转成保留顺序的字典(Python 3.7+版本字典默认保留插入顺序)
sorted_dict = dict(sorted_pairs)

这样就能得到按值排序后的字典啦。

2. 按多个值排序并返回带键的排序后字典

针对你给出的pandas场景,原代码只返回了排序后的值列表,要同时保留键,只需要把dct.values()换成dct.items(),让排序时保留键值对的关联,之后再转成字典就行。

改进后的代码如下:

import pandas as pd

# 你的原始数据构建代码
df = pd.DataFrame([[-1,1,-1,3,1,2]], index = pd.date_range(start = '2022-02-07', periods =1, name = 'Date'))
df.columns = pd.MultiIndex.from_tuples((('IINN', 's'), ('IINN', 'count'), ('GII', 's'), ('GII','count'),('HCM','s'), ('HCM', 'count')))
dct={c:df[c] for c in df.columns.levels[0]}

# 对键值对按多个值排序:先按's'列最后一行,再按'count'列最后一行,倒序
sorted_items = sorted(dct.items(), key=lambda x: (x[1]['s'].iloc[-1], x[1]['count'].iloc[-1]), reverse=True)
# 转换为排序后的字典
sorted_dct = dict(sorted_items)

运行这段代码后,sorted_dct就是你想要的带键的排序后字典,键的顺序是HCM、GII、IINN,对应的值是排序后的子DataFrame,完美保留了键和值的对应关系。

补充说明

  • 用iloc[-1]是为了稳妥地获取DataFrame最后一行的值,因为你的数据只有一行,也可以换成.iat[-1]或者.values[0],效果一致。
  • Python 3.7及以上版本的字典会保留插入顺序,所以转成dict()后排序顺序不会丢失。

内容的提问来源于stack exchange,提问作者jgg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 12:07:46