【问题标题】:Is it possible to change the contents of inner dictionary only without changing the order of outer dictionary in a nested dictionary in python?是否可以仅更改内部字典的内容而不更改python嵌套字典中外部字典的顺序?
【发布时间】: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


【解决方案1】:

我想按值对内部字典的键进行排序。我可以按值对键进行排序,但是输出不同(字典中的列表)但在我的情况下很有用。

dict1 = {}
for Keys, Values in dict.items():
   dict1[Keys] = sorted(Values, key = Values.get)

在打印 dict1 时,我得到如下信息:

dict1 = {
         1: [4, 1, 3, 2], 
         2: [1, 4, 3, 2], 
         3: [1, 4, 2, 3], 
         4: [4, 1, 2, 3]
        }

虽然我希望我的输出在一个嵌套字典中,但我会修改我的代码以适应这个结果。

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2022-11-15
    • 2021-04-28
    • 2021-12-02
    • 2022-06-13
    相关资源
    最近更新 更多