方便地解析嵌套字典



对深度嵌套字典进行索引的最佳方法是什么?考虑以下示例:

x = {'a': {'b': {'c': {'d': 1}}}}
item = x['a']['b']['c']['d']

有没有一种方便的方法可以提供一条路径?

# something like this
item = x.get_path('a/b/c/d')

您可以使用内置库构建简单的方法,如下所示:

from functools import reduce, partial
from operator import getitem
nested_get = partial(reduce, getitem)

x = {'a': {'b': {'c': {'d': 1}}}}
item = nested_get(["a", "b", "c", "d"], x)
print(item)

输出

1

更新

要模拟dict.get的行为,请使用:

def nested_get(path, d, default=None):
current = d
for key in path:
try:
current = current[key]
except KeyError:
return default
return current

x = {'a': {'b': {'c': {'d': 1}}}}
item = nested_get(["a", "b", "c", "d"], x)
print(item)
item = nested_get(["a", "b", "e", "d"], x)
print(item)

输出

1
None

这里有一个简单的实现,它大致支持您正在寻找的查找语法。

def get_value(x, path):
for key in path.split('/'):
x = x[key]
return x
x = {'a': {'b': {'c': {'d': 1}}}}
print(get_value(x, 'a/b/c/d'))

给出:

1

如果任何密钥都不存在,那么您将获得一个KeyError。如果您想要一些其他行为(例如返回None(,则可以将x = x[key]行更改为:

try:
x = x[key]
except KeyError:
return None

最新更新