将字典快速排序到 OrderedDict [关闭]

Posted

技术标签:

【中文标题】将字典快速排序到 OrderedDict [关闭]【英文标题】:Quicksort a dict to an OrderedDict [closed] 【发布时间】: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'])。网上有无数的教程和例子。你到底卡在哪里了? 【参考方案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 实现所取代,其中订购信息更难从外部搞砸。

以上是关于将字典快速排序到 OrderedDict [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python OrderedDict使用

字典排序

OrderedDict

[PY3]——字典排序问题

Python中的OrderedDict

Python中OrderedDict的使用