当前位置: 首页 > 面试题库 >

python字典基于值降序排序

颛孙正谊
2023-03-14
问题内容

我想根据子键key3的值按降序对字典d进行排序。见下文:

d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 },
      '124': { 'key1': 6, 'key2': 56, 'key3': 6 },
      '125': { 'key1': 7, 'key2': 44, 'key3': 9 },
    }

所以最终的字典看起来像这样。

d = { '125': { 'key1': 7, 'key2': 44, 'key3': 9 },
      '124': { 'key1': 6, 'key2': 56, 'key3': 6 },
      '123': { 'key1': 3, 'key2': 11, 'key3': 3 },
    }

我的方法是从d形成另一个字典e,其字典键将是key3的值,然后使用reversed(sorted(e)),但是由于key3的值可以相同,因此字典e丢失了一些键及其值。说得通?

我怎样才能做到这一点?这不是经过测试的代码。我只是想了解逻辑。


问题答案:

字典没有任何固有的顺序。或者,相反,它们的固有顺序是“任意但不是随机的”,因此对您没有任何好处。

用不同的术语来说,您d和您e将是完全等效的字典。

您可以在此处使用OrderedDict

from collections import OrderedDict
d = { '123': { 'key1': 3, 'key2': 11, 'key3': 3 },
      '124': { 'key1': 6, 'key2': 56, 'key3': 6 },
      '125': { 'key1': 7, 'key2': 44, 'key3': 9 },
    }
d_ascending = OrderedDict(sorted(d.items(), key=lambda kv: kv[1]['key3']))
d_descending = OrderedDict(sorted(d.items(), 
                                  key=lambda kv: kv[1]['key3'], reverse=True))

原始文件d具有任意顺序。d_ascending具有您原先 认为 的顺序d,但没有。并d_descending拥有您想要的订单e

如果您实际上并不需要e用作字典,而只是希望能够以d特定顺序迭代的元素,则可以简化此操作:

for key, value in sorted(d.items(), key=lambda kv: kv[1]['key3'], reverse=True):
    do_something_with(key, value)

如果要在所有更改中以排序的顺序维护词典,而不是OrderedDict,则需要某种排序的词典。您可以在PyPI上找到许多选项,一些选项在树的顶部实现,其他选项在OrderedDict按需要重新排序的顶部等等。



 类似资料:
  • 问题内容: 我发现有很多线程可以按这里的值进行排序,但是它似乎对我不起作用… 我有一个包含元组的列表字典。每个列表都有不同数量的元组。我想按每个列表包含多少个元组对字典进行排序。 这可能吗? 问题答案: d = {“one”: [(1,3),(1,4)], “two”: [(1,2),(1,2),(1,3)], “three”: [(1,1)]} >>> for k in sorted(d, ke

  • 问题内容: 我有一个从数据库中的两个字段读取的值字典:字符串字段和数字字段。字符串字段是唯一的,因此这是字典的键。 我可以对键进行排序,但是如何根据值进行排序? 问题答案: Python 3.7+或CPython 3.6 字典在Python 3.7+中保留插入顺序。在CPython 3.6中相同,但是它是一个实现细节。 要么 较旧的Python 无法对字典进行排序,只能获得已排序字典的表示形式。字

  • rank ▲ ✰ vote url 11 867 379 1107 url 用字典的值对字典进行排序 我有个字典,字典的值来自于数据库:一个是字符串,一个是数字.字符串是唯一的,所以键就是字符串. 我可以用键来排序,但是怎么用值来排序呢? 注:我已经看过另一个问题怎样对列表中的字典的键值对字典进行排序?,或许这种方法可以,但是我确实只需要一个字典,我想看看还有其他更好的方法. 对字典进行排序是不可

  • 问题内容: 我有一本字典,其中包含以下数据: 我想按double值对字典排序。我做了一些研究,但所有示例均不支持当前版本的Swift 我试过在Swift中按值使用SortDictionary中的这段代码: 但这是行不通的。如何按字典值对字典排序? 问题答案: 目前尚不清楚您的期望是什么。确实没有排序字典这样的东西。您的代码基本上是正确的,但括号位置错误。我尝试了这个: 结果: 如果您认为这是错误的

  • 问题内容: 如何根据值对字典进行排序,以便输出为: 当前尝试(排序不正确): 问题答案: 您需要对字典值而不是键进行排序。您可以从字典中创建一个元组数组,按其值对它进行排序,如下所示: Xcode 9•Swift 4 或 Xcode 8•Swift 3 使用按键对字典进行排序 使用字典的键和本地化的比较来对字典进行排序:

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在