Python字典按键/值排序的几种方法

简介: Python字典按键/值排序的几种方法

本文介绍对Python字典的按键和按值排序的几种方式。

按键排序

# 对字典按键排序
def sort_by_key(d):
  '''
  d.items() 返回元素为 (key, value) 的可迭代类型(Iterable),
  key 函数的参数 k 便是元素 (key, value),所以 k[0] 取到字典的键。
  '''
    return sorted(d.items(), key=lambda k: k[0])
def main():
    dic = {'a': 2018, 'z': 2019, 'b': 2017}
    print(sorted(dic))  # ['a', 'b', 'z']
    print(sort_by_key(dic))  # [('a', 2018), ('b', 2017), ('z', 2019)]
    print(dict(sort_by_key(dic)))  # {'a': 2018, 'b': 2017, 'z': 2019}
if __name__ == '__main__':
    main()

如上所示:

  1. 如果直接调用sorted函数,只会对字典的键进行排序,返回键排序后的列表['a', 'b', 'z']
  2. 通过自己编写sort_by_key函数,首先通过sorted 函数返回列表,然后其中包含的元素为 tuple: ('a', 2018), ('b', 2017), ('z', 2019)
  3. 如果想得到按键排序后的字典,可以通过dict函数将包含元组的列表转换为所需要的字典{'a': 2018, 'b': 2017, 'z': 2019}

按值排序

同理,如果我们只需要对sort_by_value稍微修改一下,就可以得到按值排序的结果:

def sort_by_value(d):
    return sorted(d.items(), key=lambda k: k[1])  # k[1] 取到字典的值。
def main():
    dic = {'a': 2018, 'z': 2019, 'b': 2017}
    print(sort_by_value(dic))  # [('b', 2017), ('a', 2018), ('z', 2019)]
if __name__ == '__main__':
    main()

collections模块的OrderedDict

from collections import OrderedDict
sort_dict_by_key = OrderedDict(dic)  # 默认按键排序
print(sorted_dict_by_key)  # OrderedDict([('a', 2018), ('z', 2019), ('b', 2017)])
sort_dict_by_value = OrderedDict(sorted(dic.items(), key=lambda k: k[1]))
print(sort_dict_by_value)  # OrderedDict([('b', 2017), ('a', 2018), ('z', 2019)])

operator模块

from operator import itemgetter
dic = {'a': 2018, 'z': 2019, 'b': 2017}
print('Original dictionary : ', dic)
sorted_d = dict(sorted(dic.items(), key=itemgetter(0)))
print('Dictionary in ascending order by key : ', sorted_d)
sorted_d = dict(sorted(dic.items(), key=itemgetter(1)))
print('Dictionary in ascending order by value : ', sorted_d)

结果:

Original dictionary :  {'a': 2018, 'z': 2019, 'b': 2017}
Dictionary in ascending order by key :  {'a': 2018, 'b': 2017, 'z': 2019}
Dictionary in ascending order by value :  {'b': 2017, 'a': 2018, 'z': 2019}

 


相关文章
|
2天前
|
存储 Linux Shell
python移除/删除非空文件夹/目录的最有效方法是什么?
python移除/删除非空文件夹/目录的最有效方法是什么?
7 0
|
2天前
|
开发者 Python
【Python 基础】递推式构造字典(dictionary comprehension)
【5月更文挑战第8天】【Python 基础】递推式构造字典(dictionary comprehension)
|
4天前
|
Python
【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
【5月更文挑战第6天】【Python 基础】Python中的实例方法、静态方法和类方法有什么区别?
|
4天前
|
算法 Python
Python中不使用sort对列表排序的技术
Python中不使用sort对列表排序的技术
16 1
|
4天前
|
数据处理 Python
Python中每个字段增加多条数据的高效方法
Python中每个字段增加多条数据的高效方法
10 1
|
5天前
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
15 2
|
5天前
|
数据处理 Python
Python中按指定数量分割列表字符串的方法
Python中按指定数量分割列表字符串的方法
9 1
|
9天前
|
Python
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序
使用Python pandas的sort_values()方法可按一个或多个列对DataFrame排序。示例代码展示了如何按'Name'和'Age'列排序 DataFrame。先按'Name'排序,再按'Age'排序。sort_values()的by参数接受列名列表,ascending参数控制排序顺序(默认升序),inplace参数决定是否直接修改原DataFrame。
21 1
|
10天前
|
机器学习/深度学习 数据可视化 前端开发
【Python机器学习专栏】机器学习模型评估的实用方法
【4月更文挑战第30天】本文介绍了机器学习模型评估的关键方法,包括评估指标(如准确率、精确率、召回率、F1分数、MSE、RMSE、MAE及ROC曲线)和交叉验证技术(如K折交叉验证、留一交叉验证、自助法)。混淆矩阵提供了一种可视化分类模型性能的方式,而Python的scikit-learn库则方便实现这些评估。选择适合的指标和验证方法能有效优化模型性能。
|
5月前
|
存储 Python
python字典中删除键值的方法
python字典中删除键值的方法
106 0