【问题标题】:Index dict of dicts with a variable [duplicate]带有变量的字典的索引字典[重复]
【发布时间】: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


【解决方案1】:

您可以使用给定的键列表在字典上创建一个循环键的函数,每次索引项目:

def get_nested_value(dct, key_list)
    value = dct 
    for key in key_list:
        value = value[key]

    return value 

keys = ['Alice', 'Car', 'Colour']
print(get_nested_value(a, keys))

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2013-05-28
    • 2011-09-02
    • 2022-10-06
    • 2014-06-06
    • 1970-01-01
    • 2021-01-27
    • 2015-10-05
    相关资源
    最近更新 更多