文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python中字典的排序(Ordered

2023-01-31 06:59

关注


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')])


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯