【问题标题】:Sorting a Python Dictionary by Priority按优先级对 Python 字典进行排序
【发布时间】:2019-10-04 03:47:30
【问题描述】:

我有一个由(名称,值)对组成的 python 字典,像这样

pyDictionary = {"Bob":12,"Mellissa":12,"roger":13}

我想要做的是获得上述字典的排序版本,其中排序是通过给值赋予第一优先权来完成的,如果两对的值相同,则应通过词法比较来进行比较名字。

如何在 python3.7 中实现这一点?

【问题讨论】:

  • 不要使用dict 作为变量名,因为这样做会覆盖标准定义。
  • 请注意,python 字典中的顺序是随机的。如果要对字典进行排序,请使用集合中的OrderedDict
  • @TomKarzes 抱歉,我是社区的新手
  • @Relandom OP 明确指出问题是针对 Python 3.7,其中保留了 dict 键的顺序。
  • @AtifFarooq 无需道歉 - 这只是 Python 提示 :)

标签: python sorting python-3.7


【解决方案1】:

您可以将sortedkey 一起使用,并根据结果构建OrderedDict 以维持秩序。

(只有 python 3.6 < 才需要最后一步,在 Python 3.7 中,字典按其键插入时间排序)


from collections import OrderedDict
d = {"Mellissa":12, "roger":13, "Bob":12}

OrderedDict(sorted(d.items(), key=lambda x: (x[1], x[0])))
# dict(sorted(d.items(), key=lambda x: (x[1], x[0]))) # for Python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]

或者您也可以使用operator.itemgetter 直接分别从每个元组中获取valuekey

OrderedDict(sorted(d.items(), key=itemgetter(1,0)))
# dict(sorted(d.items(), key=itemgetter(1,0))) # python 3.7
# [('Bob', 12), ('Mellissa', 12), ('roger', 13)]

【讨论】:

  • Python 3.7 dicts 是按其键插入时间排序的。
  • 是的@CristiFati 在解决方案中添加了评论
  • 如果我想按降序对第一列进行排序,但按升序对第二列进行排序,这个解决方案可以扩展到这个新场景吗?
  • 您的意思是从 a 到 z 的键和降序的值 @AtifFarooq ?
  • 使用dict(sorted(d.items(), key=lambda x: (-x[1], x[0])))
【解决方案2】:

您可以使用反转键值元组顺序的键函数对字典项进行排序:

dict(sorted(pyDictionary.items(), key=lambda t: t[::-1]))

【讨论】:

  • reversed 呢?
  • reversed 不起作用,因为它返回一个不可比较的可迭代对象。
猜你喜欢
  • 2014-04-05
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多