当前位置: 首页 > 知识库问答 >
问题:

打印词典(JSON)人类可读

庄嘉
2023-03-14

假设我有一个(嵌套的)字典,如下所示(注意lists-values):

dic = {'level1':
            {'level2':(1, 2),
             'level3':
                    [
                     {'level4': (1, 2)},
                     {'level5': (1, 2)}
                    ]
             }
       }

我正在寻找一种正确的方法来打印这本词典,我使用json来完成此操作:

import json
print json.dumps(dic, indent=4)
{
    "level1": {
        "level2": [
            1, 
            2
        ], 
        "level3": [
            {
                "level4": [
                    1, 
                    2
                ]
            }, 
            {
                "level5": [
                    1, 
                    2
                ]
            }
        ]
    }
}
import yaml
print yaml.dump(dic)
level1:
  level2: !!python/tuple [1, 2]
  level3:
  - level4: !!python/tuple [1, 2]
  - level5: !!python/tuple [1, 2]
"level1"
    |---"level2":            1, 2
    |---"level3": 
            |---"level4":    1, 2
            |---"level5":    1, 2

我相信上面的内容更容易阅读,而且可能有python库可以做到这一点。

共有1个答案

养淇
2023-03-14

这是根据activestate代码示例改编的。不能说它很漂亮,但可能会让你朝着正确的方向前进:

myDict = {'level1':
         {'level2':(1, 2),
          'level3':
                [
                 {'level4': (1, 2)},
                 {'level5': (1, 2)},
                ], 
         'level6': [1,2,3], 
         'level7':{'level8': (1,2), 'level9': (1,2)}
         }
    }



def prettyPrint(dictionary, ident = '', braces=1):
    for key, value in dictionary.iteritems():
        if isinstance(value, dict):
            print '%s%s%s%s' % (ident, braces*'[', key, braces*']') 
            prettyPrint(value, ident+'  ', braces+1)
        elif isinstance(value, list):
            ndict=0
            for v in value:
                if isinstance(v, dict):
                    ndict += 1
            if ndict:
                print '%s%s' % (ident, key) 
                for e in value:
                    if isinstance(e, dict):
                        prettyPrint(e, ident+'  ', braces+1)
                    else: 
                         print ident+'%s : %s' %(key, e)
            else:
                print ident+'%s : %s' %(key, value)
        else:
            print ident+'%s : %s' %(key, value)

prettyPrint(myDict)


[level1]
  level2 : (1, 2)
  level3
    level4 : (1, 2)
    level5 : (1, 2)
  level6 : [1, 2, 3]
  [[level7]]
    level8 : (1, 2)
    level9 : (1, 2)
 类似资料:
  • 这是这个问题的后续问题。我需要prettyprint一个python dict(这样我可以直观地检查/修改它),并且我需要有json格式的输出(带双引号)。 模块pretty打印dict但使用单引号(而不是JSON!)。这是链接的其他问题/答案的主题。

  • 问题内容: 如何在Python中打印深度约为4的字典?我尝试使用进行漂亮的打印,但是没有用: 我只是想为每个嵌套添加一个缩进(),以便获得如下内容: 等等 我怎样才能做到这一点? 问题答案: 我不确定您希望格式看起来如何,但是可以从这样的函数开始:

  • 这是本字典 将此 它打印以下内容: 但我想让程序像这样打印: 我刚开始学字典,所以我不知道怎么做。

  • 问题内容: 这只是我需要访问的一小部分JSON代码… 我在打印嵌套JSON值时遇到问题。如果我想打印“ fcttext”,我该怎么做?我已经尝试过了… 我究竟做错了什么?完整的JSON代码。 问题答案: 首先,您的json不正确,请使用jsonlint [1]检查json的格式是否正确。 将JSON重新格式化为以下格式, 使用以下代码进行解析, 我已经使用Google的GSON [2]库来解析JS

  • 问题内容: 考虑以下代码段: 控制台输出: 可选([1、4、9、16、25] [75、43、103、87、12] 为什么字典中有“ Optional”? 问题答案: 为了安全起见,Swift字典正在返回可选内容。如果您尝试访问一个不存在的密钥,那将使您无用。 您还可以使用下标语法从字典中检索特定键的值。因为可以请求不存在任何值的键,所以字典的下标返回字典值类型的可选值。如果字典包含所请求键的值,则

  • 问题内容: 我想打印一个特定的Python字典键: 现在我可以检查是否可以,但是我想做的是打印密钥的名称。当然可以使用,但是我不想列出 所有 键,而只列出一个特定的键。例如,我期望这样的事情(用伪代码): 有什么方法可以打印键名? 编辑: 好的,非常感谢你们的反应!:)我意识到我的问题没有很好地表述和琐碎。我只是感到困惑,因为我意识到key_name是两个不同的东西,我认为从字典上下文中打印出来是