python,dict深键替换

时间:2014-06-02 11:15:48

标签: python dictionary

我有像

这样的词典
{'1': {'b': 1, 'c': 2}, '2': {'b': 3, 't': 4}, '3': {'b': 1, 'z': 1}}

我需要更换所有' b'例如,' bb' (并得到一个新的词典)。输出应为

{'1': {'bb': 1, 'c': 2}, '2': {'bb': 3, 't': 4}, '3': {'bb': 1, 'z': 1}}

有没有简单的pythonic方式来做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:4)

像这样:

In [3]: for k, v in d.items():
   ...:     d[k]['bb'] = v.pop('b')
   ...:     

In [4]: d
Out[4]: {'2': {'t': 4, 'bb': 3}, '3': {'z': 1, 'bb': 1}, '1': {'bb': 1, 'c': 2}}

如果某些嵌套字典没有KeyError密钥,则上述代码会导致'b'。故障安全版本:

In [8]: for k, v in d.items():
   ...:     if 'b' in v:
   ...:         d[k]['bb'] = v.pop('b')

上述解决方案将对原始字典进行更改。您可以使用copy.deepcopy制作副本(如评论中建议的Padraic Cunningham)。

单行(词典理解创建 dict对象):

In [13]: { x: dict(('bb' if y == 'b' else y, d[x][y]) for y in d[x]) for x in d }
Out[13]: {'2': {'t': 4, 'bb': 3}, '3': {'z': 1, 'bb': 1}, '1': {'bb': 1, 'c': 2}}