【发布时间】:2019-02-15 00:56:53
【问题描述】:
我希望能够使用单个“nested_key”变量从一组(任意深度的)嵌套字典中获取值。
如果我有一个字典,我可以像这样简单地索引它:
a = {"Alice": {"Car": {"Color": "Blue"}}}
a["Alice"]["Car"]["Color"]
>>> "Blue"
但我不认为(?)我可以轻松地将索引链变成一个变量并以相同的方式使用它?
a = {"Alice": {"Car": {"Color": Blue}}}
nested_key = ["Alice"]["Car"]["Color"] # for use in: a[nested_key]
>>> TypeError: list indicies must be integer, not str
列表具有slice() 对象;但是有没有办法将“类键”对象分配给变量?
否则我想recursive_get 风格的函数(例如https://stackoverflow.com/a/28225660/2588039)可能是我最好的选择?
【问题讨论】:
-
递归样式函数似乎是最好的方法。当然,你总是可以用迭代来代替递归。无论哪种方式,这里都没有光滑的oneliner。
-
因重复而关闭,因为答案开始模仿...重复的答案。
-
更多灵感,你可以看看Accessor class from django-tables2,它允许像
A('Alice.Car.Color').resolve(a)这样的东西。 -
@timgeb, 难道
reduce(getitem, ['Alice', 'Car', 'Color'], a)不是一个光滑的单线? -
@David258,我在重复的问题中添加了new answer。您可能会发现它比公认的答案更具 Pythonic。
标签: python python-3.x dictionary