python - 一种从字典 python 中查找嵌套值的方法

标签 python dictionary reduce functools

<分区>

假设我有一个任意嵌套的字典:

d = {
    11: {
        21: {31: 'a', 32: 'b'},
        22: {31: 'a', 34: 'c'},
    },
    12: {
        1: {2: 3}
    }
}

还有一个键列表,其位置告诉我在哪个嵌套字典中查找每个键:

keys = [11, 21, 31]
# keys = [11, 23, 44]

是否有一个简单的衬垫可以做到这一点?我查看了下面列出的问题,它们很相似,但并不是我真正想要的。我自己也尝试过并想出了这个:

from functools import reduce

def lookup(d, key):
    return d.get(key, {}) if d and isinstance(d, dict) else None

def fn(keys, d):
    return reduce(lookup, keys, d)

print(fn(keys, d)) # prints 'a'

这个问题是,如果是第二个键列表(请参阅注释掉的键),它会继续进一步查找嵌套键,即使没有找到更高级别的键,并且继续是没有意义的。如何在找到最终匹配项或失败后立即停止 reduce(下面列出的问题之一解决了它,但我不能真正将其应用到我的用例中......或者我可以?)?还有其他想法吗?哦,我只想使用官方 python 库来完成此操作。所以没有 numpypandas 等,但是 functoolsitertools 很好

Python: Convert list to dict keys for multidimensional dict with exception handling

Is there a simple one-liner for accessing each element of a nested dictioanry in Python?

Accessing nested values in nested dictionaries in Python 3.3

Using itertools for recursive function application

Stopping a Reduce() operation mid way. Functional way of doing partial running sum

Finding a key recursively in a dictionary

谢谢!

最佳答案

您可以使用 functools.reduce() :

from functools import reduce # In Python 2, don't import it. (It's a built-in)

print(reduce(dict.get, keys, d))

# 'a'

对于您提到的键,它是这样的:

  • d(初始)和keys的第一项(11)调用dict.get来得到 d[11]
  • 使用结果(字典)和 keys(21)中的下一项调用 dict.get 以获取 { ...}[21]
  • 调用dict.get ...
    ...

直到 keys 被“减少”为最终值 ('a')

编辑:如果没有这样的键,dict.get 会导致None,因此可能会出现不需要的结果。如果你想要一个KeyError,你可以使用operator.getitem相反。

关于python - 一种从字典 python 中查找嵌套值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584297/

相关文章:

Java - Map 打印我们插入的值

javascript - 为什么在reduce()方法中索引有时会运行异常?

ios - 低质量 iOS 屏幕截图

python - 使用 gpu 使用 opencv 测量图像清晰度

python 瓶 : Can't connect to server or debug it

python - 如何跳过死链接并转到下一个?

python - Django - 如何获得永久链接以使用 "throwaway"slug

swift - Swift 2 中的通用设置类

algorithm - python : List all possible paths in graph represented by dictionary

python - 如何在 Python 3 中使用过滤器、映射和归约