【发布时间】:2018-04-25 02:10:54
【问题描述】:
this post 接受的答案明确提到在 Python 中无法对字典进行排序。但是,下一个答案声称实际上可以进行“按字典值排序”。我的情况接近this post。在这里,建议主字典使用OrderedDict 按内部字典之一的键值排序。在我的情况下,我希望主字典的键是完整的,但值(它们本身就是字典)按降序排序。我有以下字典:
dict = {
1: {1: -8, 2: -5, 3: -6, 4: -2},
2: {1: -7, 2: -6, 3: -5, 4: -1},
3: {1: -7, 2: -6, 3: -4, 4: -5},
4: {1: -7, 2: -4, 3: -6, 4: -8}
}
如何排列内部字典,使结果字典如下:
dict = {
1: {4: -2, 2: -5, 3: -6, 1: -8},
2: {4: -1, 3: -5, 2: -6, 1: -7},
3: {3: -4, 4: -5, 2: -6, 1: -7},
4: {2: -4, 3: -6, 1: -7, 4: -8}
}
我系统中安装的python是Python 3.6.5。距离我运行我的第一个 python 代码已经过去了一周。因此,我对python很陌生。我之前问了几个问题,没有得到很好的回应。我也不得不删除一个问题。我有被阻止问更多问题的危险。我看到很多关于在 python 中排序字典的帖子,混合的答案让我感到困惑。 基本上,我要求按它们的值对内部字典的键进行排序(不更改主字典的键顺序)。甚至可能吗?我该怎么做?请帮帮我!
【问题讨论】:
-
字典本质上是无序的(Python 3.7 之前)。如果您关心订单,请使用不同的数据结构
-
从 Python 3.6 开始,对于 Python 的 CPython 实现,字典会记住插入项目的顺序。这个新实现的顺序保留方面被认为是一个实现细节,不应依赖
-
最好的办法是使用 SortedContainer 的 SortedDict:grantjenks.com/docs/sortedcontainers/sorteddict.html 您可以提供一个 key 参数(不要与字典的键混淆),通过它对 SortedDict 的键进行排序。否则,您不妨解释一下您要做什么,我们当然可以为您提供嵌套字典的替代方案。
-
@TravisBlack 在实际情况中,内部字典包含许多键值对。将它们按降序排序后,需要前 'n' 个键值对进行进一步操作。 'N' 是键值对的总数,'N-n' 对被丢弃。但是,外部字典的键必须保持不变。
标签: python dictionary