Maison  >  Article  >  développement back-end  >  Python construit des méthodes personnalisées pour embellir la sortie de la structure du dictionnaire

Python construit des méthodes personnalisées pour embellir la sortie de la structure du dictionnaire

高洛峰
高洛峰original
2018-05-29 10:33:582452parcourir

Exemple :

Le code est le suivant :

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

La belle sortie est :

Python construit des méthodes personnalisées pour embellir la sortie de la structure du dictionnaire

Observez les caractéristiques :
1. Les touches du même niveau sont alignées à gauche, c'est-à-dire que le retrait est le même.

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

2. Changez la ligne après le numéro.
3. Si la valeur est un dictionnaire, c'est-à-dire un dictionnaire imbriqué, alors le dictionnaire imbriqué est au niveau suivant et l'indentation de la clé dans chaque niveau est différente.

Analyse d'idée :
Il s'agit d'un problème de "chaîne d'épissage", les éléments sont ""{} :, n et espace indenté.
Parcourez chaque paire clé-valeur (k, v), assemblez-les ensemble pour obtenir un rendement et effectuez une récursivité lorsque vous rencontrez un dictionnaire imbriqué, c'est-à-dire un rendement récursif.

Téléchargez le code.

#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)

Pour plus de méthodes personnalisées de construction Python pour embellir la sortie de la structure du dictionnaire, veuillez prêter attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn