【问题标题】:convert nested dictionary to file将嵌套字典转换为文件
【发布时间】:2019-10-25 04:45:35
【问题描述】:

我有一个字典,我通过从文件中提取并修改值来修改它,现在我想以类似的格式将它放回文件中。

字典类似如下:

d={'a':
    {'c':'something else',
     'd':{'e':'some item'}
    },
   'b':
    {'z':'something else',
     's':{'f':'some item'}
    }
  }

这是一个包含嵌套项的很长的字典,我猜我必须使用某种递归

我目前不知道该怎么做,所以我没有现有代码可以从我所在的位置获取,即字典到文件。

我想要得到的最终结果如下,包括换行符和间距:

<a>
    c = something else
    <d>
        e = some item
    </d>
</a>
<b>
    z = something else
    <s>
        f = some item
    </s>
</b>

【问题讨论】:

  • 是否只存储strdict类型的值?
  • 值是带有字符串的嵌套字典。

标签: python


【解决方案1】:
d={'a':
    {'c':'something else',
     'd':{'e':'some item'}
    },
   'b':
    {'z':'something else',
     's':{'f':'some item'}
    }
}

def printer(d, t=0):
    for k, v in d.items():
        if isinstance(v, str):
            yield '\t' * t + '{} = {}'.format(k, v)
        else:
            yield '\t' * t + '<{}>'.format(k)
            yield from printer(v, t=t+1)
            yield '\t' * t + '</{}>'.format(k)

s = '\n'.join(printer(d))
print(s)

打印:

<a>
    c = something else
    <d>
        e = some item
    </d>
</a>
<b>
    z = something else
    <s>
        f = some item
    </s>
</b>

【讨论】:

  • 有没有办法在 python 2.7 或更早的 python3 中做到这一点?旧的似乎不支持 f'strings'
  • @user1601716 更新了我的答案。现在它使用format() 方法。
  • 那行得通,你将如何在 python2.7 中执行 'yield from printer(v, t=t+1)'?
  • @user1601716 我想这就是答案stackoverflow.com/questions/17581332/…
  • 必须给你。这是一个很好的答案。我正在考虑递归路线。太棒了
猜你喜欢
  • 2023-02-23
  • 2020-09-03
  • 2013-12-07
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
相关资源
最近更新 更多