【Python 必会技巧】对字典按照键(key)或者值(value)排序

先总结一下,分为以下四种情况:

  • 情况一:按照键排序,只输出排序后所有的键
  • 情况二:按照值排序,只输出排序后所有的值
  • 情况三:按照键排序,同时输出排序后所有的键和对应的值
  • 情况四:按照值排序,同时输出排序后所有的键和对应的值
情况一:按照键排序,只输出排序后所有的键

直接使用 sorted() 方法,默认是对字典的键进行排序

>>> dict = {'b': 2, 'a': 1, 'd': 4, 'c': 3}
>>> print(sorted(dict))
['a', 'b', 'c', 'd']

也可以先用 dict.keys() 取字典的键,然后再使用 sorted() 方法进行排序

>>> dict = {'b': 2, 'a': 1, 'd': 4, 'c': 3}
>>> print(sorted(dict.keys()))
['a', 'b', 'c', 'd']

以上方法是从小到大排序,如果是从大到小,添加 reverse=True 即可

>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.keys(), reverse=True))
['d', 'c', 'b', 'a']
情况二:按照值排序,只输出排序后所有的值

先用 dict.values() 取字典的值,然后再使用 sorted() 方法进行排序

>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.values()))
[1, 2, 3, 4]

同理,如果是从大到小排序,添加 reverse=True 即可

>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.values(), reverse=True))
[4, 3, 2, 1]
情况三:按照键排序,同时输出排序后所有的键和对应的值

方法一:dict.items() 方法可以得到包含字典键和值的元组,然后使用匿名函数 lambda,其中 i[0] 表示字典的键

>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.items(), key=lambda i: i[0]))
[('a', 2), ('b', 1), ('c', 4), ('d', 3)]

方法二:使用 operator 模块中的 itemgetter 函数,其中 itemgetter(0) 表示字典的键

>>> from operator import itemgetter
>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.items(), key=itemgetter(0)))
[('a', 2), ('b', 1), ('c', 4), ('d', 3)]

itemgetter 函数用于获取对象的哪些维的数据,参数为一些序号,以下举例说明:

>>> import operator
>>>
>>> a = [1, 2, 3, 4]
>>> b = operator.itemgetter(0)  # 定义函数b,获取对象的第0个域的值
>>> print(b(a))
1
>>> b = operator.itemgetter(0, 1) # 定义函数b,获取对象的第0个和第1个域的值
>>> print(b(a))
(1, 2)
情况四:按照值排序,同时输出排序后所有的键和对应的值

方法一:与情况三类似只需要将 i[0] 改成 i[1] 即可

>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.items(), key=lambda i: i[1]))
[('b', 1), ('a', 2), ('d', 3), ('c', 4)]

方法二:与情况三类似只需要将 itemgetter(0) 改成 itemgetter(1) 即可

>>> from operator import itemgetter
>>> dict = {'a': 2, 'b': 1, 'c': 4, 'd': 3}
>>> print(sorted(dict.items(), key=itemgetter(0)))
[('a', 2), ('b', 1), ('c', 4), ('d', 3)]
  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT.BOB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值