python - 根据键更新嵌套字典中的值

标签 python dictionary nested

我有一个嵌套字典,我想根据项目的键值更新其值。 例如,我有以下字典,我想将 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/

相关文章:

javascript - 如何将一个字符串分解成多个重叠的更小的字符串?

python - 为什么我的 L1 正则化实现效果不佳?

Python 将元组转换为字典

python - 我得到 : "object does not support item assignment" when populating a dictionary

java - 如何使用 Java 在 MongoDB 中通过嵌入数组过滤文档

python - CSV 到嵌套(分层)JSON - 使用 Python 标记父项

python - 编译的 Python 二进制报告错误的版本

Python循环不断重复?为什么?

python - 带有最初隐藏/静音的图例组的 Bokeh 图

java - 嵌套 Map 的基于时间戳的排序