【问题标题】:Quicksort a dict to an OrderedDict [closed]将字典快速排序到 OrderedDict [关闭]
【发布时间】:2018-09-19 10:21:54
【问题描述】:

在 python 中,如何快速将嵌套字典排序为 OrderedDict?例如:

{'susan': {'number': '5', 'fav_color': 'yellow'},
'josh': {'number': '1', 'fav_color': 'blue'},
'casey': {'number': '11', 'fav_color': 'orange'}}

我想对数字进行排序,最终得到:

{'josh': {'number': '1', 'fav_color': 'blue'},
'susan': {'number': '5', 'fav_color': 'yellow'},
'casey': {'number': '11', 'fav_color': 'orange'}}

【问题讨论】:

  • 所以....你有什么尝试吗?
  • 为什么要快速排序而不是使用普通的 timsort?
  • 您能否调整this question 的答案以满足您的需求?
  • 但无论哪种方式,答案都是相似的:不是对sorted(d.items(), key=whatever) 进行字典理解,而是对some_quicksort_function_you_wrote_or_found(d.items(), key=whatever) 进行字典理解。
  • 这是对特定键进行排序的又一个案例——在这种情况下,它是int(elem['number'])。网上有无数的教程和例子。你到底卡在哪里了?

标签: python dictionary ordereddictionary


【解决方案1】:

您无法使用OrderedDict。如果您查看collections.OrderedDict 的来源,排序顺序存储在一个链表中,这是一个您无法更改的“私有”双下划线变量。

但是,您可以对迭代的键和值进行排序,并根据您的排序偏好创建一个新的 OrderedDict

OrderedDict(sorted(d.items(), key=lambda x: int(x[1]['number'])))

【讨论】:

  • @Aran-Fey 啊,对了,甚至没有注意到它们是字符串。
  • 成功了,谢谢
  • 这些天来,collections/__init__.py 中的 OrderedDict 实现甚至没有被使用;它被 odictobject.c 中的 C 实现所取代,其中订购信息更难从外部搞砸。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 2015-10-24
  • 1970-01-01
  • 2021-12-24
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多