我有一个简单的python dict,它以下面的格式打印,
{'stats1': {'var': {'avail': 'yes'}, 'target': {'avail': 'no'}}}
但我正在寻找以下面的格式打印它,如ruby hash,
{'stats1'=> {'var'=> {'avail'=> 'yes'}, 'target'=> {'avail'=> 'no'}}}
我尝试了谷歌以红宝石哈希格式打印python dict的方法,但没有运气。
答案 0 :(得分:4)
可以通过对字典的递归扫描来完成,检查值是否是字典的实例以进行递归调用,否则只需打印(也可以处理引用字符串的转义)
def rp(d,outstream):
outstream.write("{")
first_print = True
for k,v in d.items():
if not first_print:
outstream.write(",")
else:
first_print = False
outstream.write("'{}'=> ".format(k.replace("'",r"\'")))
if isinstance(v,dict):
rp(v,outstream)
else:
outstream.write("'{}'".format(v.replace("'",r"\'")))
outstream.write("}")
可以使用sys.stdout
或io
进行测试以获取str
对象
import io
d = {'stats1': {'var': {'avail': 'yes'}, 'target': {'avail': 'no'}}}
outs = io.StringIO()
rp(d,outs)
print(outs.getvalue())
结果:
{'stats1'=> {'target'=> {'avail'=> 'no'},'var'=> {'avail'=> 'yes'}}}
当然这个解决方案很脆弱:例如,传递一个dicts列表是行不通的。当然,可以使用更多编码和isinstance
来完成。而且可能还有更多的角落。
答案 1 :(得分:2)
我找到了一个简单的解决方法。如果d
是dict
print(str(d).replace(': ', '=> '))
这是有效的,因为字典中的字符串中没有:
。