首页 > 解决方案 > 分层访问字典

问题描述

想要dict通过像dict[accessor]while acccessoris这样的字符串来访问'keyA.nestedKeyB'。在这里用 Lambda 找到了一些东西并覆盖了dict类 ( https://stackoverflow.com/questions/39818669/dynamically-accessing-nested-dictionary-keys),但不幸的是没有工作示例。

代码

data = { "keyA": { "nestedKeyB": "Hello" } }

print(data['keyA']['nestedKeyB'])  # prints 'Hello'

accessor = 'keyA.nestedKeyB'
print(data[accessor])  # KeyError

标签: python

解决方案


由于 python dict 不支持点符号,因此您必须将访问器转换为foo["bar"]["baz"]表单。

像这样简单的东西,

def access(foo, accessor):
    keys = accessor.split('.')
    data = foo
    for key in keys:
        data = data[key]
    return data

推荐阅读