python3.5 使用sorted和OrderedDict 对字典排序 您所在的位置:网站首页 python按键值排序 python3.5 使用sorted和OrderedDict 对字典排序

python3.5 使用sorted和OrderedDict 对字典排序

2024-07-11 01:29| 来源: 网络整理| 查看: 265

1 首先介绍一下 sorted() 函数:

输入代码:print(help(sorted)), 查看函数用法 输出为:

Help on built-in function sorted in module builtins: sorted(iterable, key=None, reverse=False) Return a new list containing all items from the iterable in ascending order. A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order. None

sorted(iterable, key=None, reverse=False) , 返回一个有序的列表

iterable , 一个可以迭代的对象key , 用来比较的对象,可以省略reverse , 指定是否颠倒,即是否逆序,默认是正序, 可以省略 2 使用 sorted 对字典排序,注意字典的键key值都是同类型的 test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'} # 对字典的key值列表排序,返回列表 print(sorted(test.keys())) # 对字典的键值对元组列表排序,按元组的第1个元素排序,也就是 key # 返回的是一个元组列表 print(sorted(test.items(), key=lambda obj: obj[0])) # 对字典的键值对元组列表排序,按元组的第2个元素排序,也就是 value # 返回的是一个元组列表 print(sorted(test.items(), key=lambda obj: obj[1]))

输出结果为:

[0, 1, 2, 3, 4, 5, 6] [(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')] [(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')]

如果要反序,添加 reverse=True 即可, 如:sorted(test.keys(), reverse=True)

3 使用 OrderedDict 对字典排序 from collections import OrderedDict test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'} # 普通 dict 插入元素时是无序的,使用 OrderedDict 按元素插入顺序排序 # 对字典按key排序, 默认升序, 返回 OrderedDict def sort_key(old_dict, reverse=False): """对字典按key排序, 默认升序, 不修改原先字典""" # 先获得排序后的key列表 keys = sorted(old_dict.keys(), reverse=reverse) # 创建一个新的空字典 new_dict = OrderedDict() # 遍历 key 列表 for key in keys: new_dict[key] = old_dict[key] return new_dict # 对字典按 value 排序,默认升序, 返回 OrderedDict def sort_value(old_dict, reverse=False): """对字典按 value 排序, 默认升序, 不修改原先字典""" # 获取按 value 排序后的元组列表 items = sorted(old_dict.items(), key=lambda obj: obj[1], reverse=reverse) # 创建一个新的空字典 new_dict = OrderedDict() # 遍历 items 列表 for item in items: # item[0] 存的是 key 值 new_dict[item[0]] = old_dict[item[0]] return new_dict print(sort_key(c)) print(sort_value(c))

输出结果为:

OrderedDict([(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')]) OrderedDict([(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')])

使用 OrderedDict 可以保证元素按插入顺序排序,如果修改上面函数:

# 创建一个新的空字典 new_dict = {}

这样创建的就是一个普通字典,虽然之前已经对key或value排好序了,但是插入的时候还是无序的,所以没作用。

简化使用 OrderedDict :

from collections import OrderedDict test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'} print(OrderedDict(sorted(test.items(), key=lambda obj: obj[0]))) print(OrderedDict(sorted(test.items(), key=lambda obj: obj[1])))

输出结果还是和之前一样:

OrderedDict([(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')]) OrderedDict([(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')])


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有