我有像
这样的词典{'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方式来做到这一点?
提前致谢。
答案 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}}