2016-05-09 117 views
0

这里是价值观与\n的字典:蟒蛇漂亮打印字典与多行文本中的值?

d = {'trace': '\n\n##### Thread Stack Trace #####\n File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap\n self.__bootstrap_inner()\n File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner\n self.run()\n File "/usr/lib/python2.7/threading.py", line 505, in run\n self.__target(*self.__args, **self.__kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 303, in run_forever\n self.process()\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/common.py", line 170, in execute\n return func(*args, **kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test_plugin/system/schedule.py", line 153, in process\n self.sleep(delta_ts)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 292, in sleep\n self.cancelled.wait(interval)\n File "/usr/lib/python2.7/threading.py", line 404, in wait\n self.__cond.wait(timeout)\n File "/usr/lib/python2.7/threading.py", line 263, in wait\n _sleep(delay)\n'} 

要漂亮打印出来,但是当我尝试

In [47]: print d 
{'trace': '\n\n##### Thread Stack Trace #####\n File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap\n self.__bootstrap_inner()\n File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner\n self.run()\n File "/usr/lib/python2.7/threading.py", line 505, in run\n self.__target(*self.__args, **self.__kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 303, in run_forever\n self.process()\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/common.py", line 170, in execute\n return func(*args, **kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test_plugin/system/schedule.py", line 153, in process\n self.sleep(delta_ts)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 292, in sleep\n self.cancelled.wait(interval)\n File "/usr/lib/python2.7/threading.py", line 404, in wait\n self.__cond.wait(timeout)\n File "/usr/lib/python2.7/threading.py", line 263, in wait\n _sleep(delay)\n'} 

In [48]: import json 

In [49]: print json.dumps(d, indent=4) 
{ 
    "trace": "\n\n##### Thread Stack Trace #####\n File \"/usr/lib/python2.7/threading.py\", line 525, in __bootstrap\n self.__bootstrap_inner()\n File \"/usr/lib/python2.7/threading.py\", line 552, in __bootstrap_inner\n self.run()\n File \"/usr/lib/python2.7/threading.py\", line 505, in run\n self.__target(*self.__args, **self.__kwargs)\n File \"/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py\", line 303, in run_forever\n self.process()\n File \"/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/common.py\", line 170, in execute\n return func(*args, **kwargs)\n File \"/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test_plugin/system/schedule.py\", line 153, in process\n self.sleep(delta_ts)\n File \"/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py\", line 292, in sleep\n self.cancelled.wait(interval)\n File \"/usr/lib/python2.7/threading.py\", line 404, in wait\n self.__cond.wait(timeout)\n File \"/usr/lib/python2.7/threading.py\", line 263, in wait\n _sleep(delay)\n" 
} 


In [50]: from pprint import pprint 

In [51]: pprint(d) 
{'trace': '\n\n##### Thread Stack Trace #####\n File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap\n self.__bootstrap_inner()\n File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner\n self.run()\n File "/usr/lib/python2.7/threading.py", line 505, in run\n self.__target(*self.__args, **self.__kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 303, in run_forever\n self.process()\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/common.py", line 170, in execute\n return func(*args, **kwargs)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test_plugin/system/schedule.py", line 153, in process\n self.sleep(delta_ts)\n File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 292, in sleep\n self.cancelled.wait(interval)\n File "/usr/lib/python2.7/threading.py", line 404, in wait\n self.__cond.wait(timeout)\n File "/usr/lib/python2.7/threading.py", line 263, in wait\n _sleep(delay)\n'} 

上述所有的不工作,如何漂亮打印它像这样:

{u'trace': ''' 

##### Thread Stack Trace ##### 
    File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap 
    self.__bootstrap_inner() 
    File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner 
    self.run() 
    File "/usr/lib/python2.7/threading.py", line 505, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 389, in run_forever 
    self.sleep(wait_time) 
    File "/usr/local/test_virtualenv/local/lib/python2.7/site-packages/test/plugin.py", line 292, in sleep 
    self.cancelled.wait(interval) 
    File "/usr/lib/python2.7/threading.py", line 404, in wait 
    self.__cond.wait(timeout) 
    File "/usr/lib/python2.7/threading.py", line 263, in wait 
    _sleep(delay) 

''' 
} 
+0

你漂亮地打印预期输出是无效的Python或JSON的语法,这是其他格式生产什么。您可以将输出显示为三重引号的字符串,但我不知道任何*已经可用的*函数或库可以产生此结果。 –

回答

0

假设它没有嵌套,你可以这样做:

def my_pprint(d): 
    print "{" + ",\n".join("{}: '{}'".format(repr(k), v) for k,v in d.items()) + "}" 
0

一个简单的两行代码可以为你的代码做你的工作,包括\ n在你的代码中。

def print_dict(d): 
    str= '{' 
    for k,v in d.items(): 
     str+="\n\'{}\' : {}".format(k,v) 
    str+= '}' 
    print str 

另一种方式来打印漂亮使用Python内置库pprint。

import pprint 
print pprint.pformat(dict_object) 

其他方法是重写字典对象的打印方法。

这些答案可能会帮助你。

How to "perfectly" override a dict?

Subclassing Python dictionary to override __setitem__