我有一个嵌套字典,我想根据项目的键值更新其值。 例如,我有以下字典,我想将 key=='p' 的每个出现的项的值设置为 1。
my_dict = {'p': 0, 'nested_dict': {'p': 0, 'a': 2}}
对于常规字典(非嵌套),update 方法提供了一个简单的单行解决方案:
my_dict.update((x, 1) for x, y in my_dict.items() if x=='p')
我正在为嵌套字典的情况寻找类似的解决方案
最佳答案
如果字典的最大深度已知且恒定,并且“p”始终出现在相同的深度,则无需递归即可解决。在所有其他情况下,都需要递归方法。根据示例问题和您的评论,我假设第二个问题是正确的。这是一个递归解决方案:
def setPto1(dct):
return {k: setPto1(v) if isinstance(v, dict) else [v, 1][k=='p'] for k, v in dct.items()}
因此,您基本上可以使用递归字典理解来循环遍历键值对。你的方法已经离你不远了。如果有不明白的地方,请留言。
如果[v, 1][k=='p']
让你感到不安,你可以用更直接的(1 if k=='p '否则v)
。它们是同一件事。
关于python - 根据键更新嵌套字典中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68064256/