【问题标题】:nested dictionary sorting嵌套字典排序
【发布时间】:2016-07-26 00:50:32
【问题描述】:

我一直在试图弄清楚如何对这些字典进行排序:d1d2inside 字典 d3

d1 = {'eggs':1, 'cheese':1}
d2 = {'cake':1, 'cream':1}
d3 = {'breakfast':{},'dessert':{}}
d3['breakfast'] = d1
d3['dessert'] = d2
for k,v in sorted(d3.items()):
    for k,v in sorted(d3['breakfast'].items()):
        for k,v in sorted(d3.items()):
            print(k,v)

这是输出:

breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}
breakfast {'eggs': 1, 'cheese': 1}
dessert {'cream': 1, 'cake': 1}

它正确排序了两个breakfastdessert,然后在dessert'cream''eggs'里面的顺序是错误的。

应该是:

dessert {'cake':1, 'cream':1}

它还会打印“排序”字典d3 四次,我不确定为什么。

据我所知,可能有更有效的方法可以做到这一点,因此欢迎提供任何信息。

【问题讨论】:

  • 请解释您希望发生什么(例如您希望看到什么输出),因为您的问题并不清楚。
  • 这是不合逻辑的代码,因为你可以只做最后一个 for 循环,你会得到两个输出,我没有得到你的代码
  • 你不应该有 3 个嵌套的 for 循环,它们都具有相同的循环变量(kv),因为两个外部循环基本上只是让内部循环运行 4 倍。请注意,仅执行 print(k,v) 正在打印出 v 是整个字典未排序。
  • 仍在尝试获取挂起循环,我并没有真正想要的格式,我只是希望对它们进行排序和打印。我有点想我有一对多的循环,但我尝试的每一个变化都不起作用。我的意思是,不到一个小时前,我什至不明白 k 和 v 代表什么。

标签: python sorting python-3.x dictionary


【解决方案1】:

所以你的算法有一些问题,主要是你嵌套的次数太多并且每次都循环相同的东西。这是一个更好的算法:

for k,v in sorted(d3.items()):
    print(k + ":")
    for k2,v2 in sorted(v.items()):
        print("\t" + k2 + ", " + str(v2))

它像这样格式化答案:

breakfast:
    cheese, 1
    eggs, 1
dessert:
    cake, 1
    cream, 1

我不确定您想要的格式是什么 - 希望您可以将其修改为您想要的格式。如您所见,这次循环首先遍历 d3,然后遍历 d3 的元素,而不是再次遍历 d3。这意味着您将深入嵌套字典,而不是之前多次打印同一个字典的操作。

【讨论】:

  • 所以我试过了,我不得不将 () 添加到打印语句中,因为它给了我一个错误,起初它没有工作,但后来我只是把 () 放在了错误的地方。它现在可以工作了,谢谢!这只是一个测试代码,以了解它是如何工作的,然后将其实现到我正在开发的另一个程序中。
  • 它对您不起作用吗?你打算做一些不同的事情吗?我需要更多的信息
  • 对不起,我一直按回车键,当我打算下一行时,它会发布评论。我将尝试将其实现到我的主程序中,如果我需要更多帮助,我可以将它添加到这个问题中吗?
【解决方案2】:
d1 = {'eggs':1, 'cheese':1}
d2 = {'cake':1, 'cream':1}
d3 = {'breakfast':{},'dessert':{}}
d3['breakfast'] = d1
d3['dessert'] = d2
for key,val in sorted(d3.items()):
    print(key,val)

【讨论】:

  • 请编辑更多信息。不建议使用纯代码和“试试这个”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“试试这个”。
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 1970-01-01
  • 2014-09-13
  • 2015-11-12
  • 2019-05-08
  • 2020-09-17
  • 2019-12-02
相关资源
最近更新 更多