漂亮地打印嵌套字典中的数据?

3

尝试在一个defaultdict中包含字典结构来显示数据

dictionary=defaultdic(dict)

示例

defaultdict = {key1} : 
                  {subkey1}:
                      (val1,
                       val2,
                       val3)
                  {subkey2}:
                      (val4,
                       val5,
                       val6)
              {key2} : 
                  {subkey3}:
                      (val7, 
                       val8, 
                       val9),
                  {subkey4}:
                      (val10,
                       val11,
                       val12)

我试图去做

for key in dictionary.iterkeys():
    print key # This will return me the key
    for items in dictionary[key]:
        print items # This will return me the subkey
        for values in dictionary[key][items]:
            print values #this return the values for each subkey)

问题在于我只得到了一个平面的条目列表;当你有太多项目和键时,几乎无法跟踪。
如何正确地打印这样的复杂结构,以一种不让你抓狂的方式呈现它们?我尝试使用pprint和json.dumps,但都没有改善情况。理想情况下,我希望它像我的示例一样打印,但我看不到简单的方法来做到这一点,而不需要进行复杂的字符串操作来格式化打印输出。

将它们转换为JSON并使用漂亮的JSON打印库?或者,在嵌套循环中附加一个制表符到打印。打印"\t" + 值,这样子键内的值就会被偏移。 - JustinDanielson
这里有一些不错的答案,你应该看一下 - https://dev59.com/XXA75IYBdhLWcg3wkJ31 - Calum
谢谢,但如果我转换成JSON,那么我需要解析JSON才能再次读取数据;我没有在任何地方使用JSON,这就是为什么我只是尝试打印出整体结构,以防需要在屏幕上进行调试。我在打印时没有考虑添加制表符;谢谢! - user393267
我认为它只是用于调试,那个用于字典的PrettyPrint模块似乎是答案,它只跳过了JSON部分。我想输出类似于JSON但没有花括号。 - JustinDanielson
2个回答

6

Python有一个专门用于此目的的PrettyPrint模块。请注意,defaultdict打印出来不会很好看,但如果您先将其转换回常规字典,则可以正常运行。

from pprint import pprint
pprint(dict(dictionary))

非常感谢,我没有将defaultdict转换,这就是为什么打印结果很糟糕的原因。 - user393267

0
使用缩进将它们打印出来,这样你的眼睛就可以直观地看到结构。
for key in dictionary.iterkeys():
    print key # This will return me the key
    for items in dictionary[key]:
        print("    %s" % items) # This will return me the subkey
        for values in dictionary[key][items]:
            print("        %s" % values) #this return the values for each subkey)

你也可以用\t替换空格字符以使用制表符;两者都可以正常工作。如果Python抱怨对象无法格式化为字符串,则还可能需要使用repr(values)str(values)来显式获取它们的字符串表示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接