【问题标题】:print python dictionary in ruby hash format以 ruby​​ 哈希格式打印 python 字典
【发布时间】:2017-08-27 05:21:39
【问题描述】:

我有一个简单的 python dict,它以以下格式打印,

{'stats1': {'var': {'avail': 'yes'}, 'target': {'avail': 'no'}}}

但我正在寻找以以下格式打印此内容的方法,例如 ruby​​ hash,

{'stats1'=> {'var'=> {'avail'=> 'yes'}, 'target'=> {'avail'=> 'no'}}}

我尝试 Google 以获取以 ruby​​ 哈希格式打印 python dict 的方法,但没有运气。

【问题讨论】:

  • 你能告诉我们你到目前为止的尝试吗?
  • 对于它的价值:{'stats1': {'var': {'avail': 'yes'}, 'target': {'avail': 'no'}}} 已经是一个有效的 Ruby 哈希,用符号作为键。它显示为{:stats1=>{:var=>{:avail=>"yes"}, :target=>{:avail=>"no"}}}

标签: python ruby dictionary hash


【解决方案1】:

可以通过字典的递归扫描来完成,检查值是否是字典的实例以进行递归调用,否则只需打印(也处理引号字符的转义)

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.stdoutio 进行测试以获取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 来完成。而且可能还有更多的极端情况。

【讨论】:

  • 如果值不是字典而是列表或其他东西,这不起作用。
【解决方案2】:

我找到了一个简单的解决方法。如果ddict

print(str(d).replace(': ', '=> '))

这是可行的,因为字典中的字符串中的任何位置都没有:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2015-11-15
    相关资源
    最近更新 更多