如何对字典的值排序?以及如何按多值排序字典并返回含键的有序字典?
字典排序问题解答
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
相关产品推荐
相关产品推荐

