将字典快速排序到 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章