ホームページ  >  記事  >  バックエンド開発  >  Python は辞書構造の出力を美しくするためのカスタム メソッドを構築します

Python は辞書構造の出力を美しくするためのカスタム メソッドを構築します

高洛峰
高洛峰オリジナル
2018-05-29 10:33:582370ブラウズ

例:

コードは次のとおりです:

d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }

美しい出力は次のとおりです:

Python は辞書構造の出力を美しくするためのカスタム メソッドを構築します

特徴を観察してください:
1. 同じレベルのキーは左揃え、つまりインデントです。同じです。

d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } }

2. 数字の後の行を変更します。
3. value が辞書、つまりネストされた辞書の場合、ネストされた辞書は次のレベルにあり、各レベルのキーのインデントは異なります。

アイデア分析:
これは「文字列の結合」問題です。要素には、「"{}:、n、スペース インデント」が含まれます。
各 (k, v) キーと値のペアを走査し、それらを結合して生成し、ネストされた辞書に遭遇した場合は再帰します (つまり、再帰 + 生成)。

コードをアップロードします。

#coding=utf-8 
def pretty_dict(obj, indent=' '): 
 def _pretty(obj, indent): 
  for i, tup in enumerate(obj.items()): 
   k, v = tup 
   #如果是字符串则拼上"" 
   if isinstance(k, basestring): k = '"%s"'% k 
   if isinstance(v, basestring): v = '"%s"'% v 
   #如果是字典则递归 
   if isinstance(v, dict): 
    v = ''.join(_pretty(v, indent + ' '* len(str(k) + ': {')))#计算下一层的indent 
   #case,根据(k,v)对在哪个位置确定拼接什么 
   if i == 0:#开头,拼左花括号 
    if len(obj) == 1: 
     yield '{%s: %s}'% (k, v) 
    else: 
     yield '{%s: %s,\n'% (k, v) 
   elif i == len(obj) - 1:#结尾,拼右花括号 
    yield '%s%s: %s}'% (indent, k, v) 
   else:#中间 
    yield '%s%s: %s,\n'% (indent, k, v) 
 print ''.join(_pretty(obj, indent)) 
 
d = { "root": { "folder2": { "item2": None, "item1": None }, "folder1": { "subfolder1": { "item2": None, "item1": None }, "subfolder2": { "item3": None } } } } 
pretty_dict(d)

辞書構造出力を美しくするための Python 構築カスタム メソッドの詳細については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。