返回带有动态索引的嵌套字典或嵌套列表的值

时间:2020-10-23 13:13:49

标签: python

我正在制作一个可以从API查询中获取数据的函数,并且无论它是词典列表,词典中的词典等,我都需要有一个动态索引。

是否可以创建一个函数来返回带有动态索引的嵌套字典或嵌套列表的值?我尝试了一个,但是它使用了exec(),我认为这不是一个好主意。

例如,我有多个列表和字典。

Set1={"A":{"a":1,"b":2}}
Set2=[1,2,3]
Set3=[{"C":3},{"D":2}]

我将需要索引所有值为“ 2”的集合。

是否可以创建类似的东西

Function["A"]["b"]
Function[1]
Function[1]["D"]

因为所有这些都只会返回2?

1 个答案:

答案 0 :(得分:2)

使用索引/密钥访问符号不是严格必要的。您可以按照以下方式编写函数:

def accessor(data, *bits):
    for bit in bits:
        try:
            data = data[bit]
        except (TypeError, KeyError, IndexError):
            raise 
            # or handle differently
    return data

>>> accessor(Set1, "A", "b")
2
>>> accessor(Set2, 1)
2
>>> accessor(Set3, 1, "D")
2

请注意,如果您动态收到bits,例如作为list的用户,您可以像下面这样解压它们:

# e.g. bits = ["A", "b"]
accessor(Set1, *bits)