gpt4 book ai didi

python - 动态访问嵌套字典键?

转载 作者:行者123 更新时间:2023-12-01 03:39:40 26 4
gpt4 key购买 nike

当您一开始不知道要访问哪个键时,是否有一些简单的方法来访问嵌套字典键?

例如:

dct = {'label': 'A', 'config': {'value': 'val1'}}

在这本字典中,我需要访问另一个可通过 config 键访问的字典中的 label 键或 value 键。

这取决于州。

例如,如果我们有名为 label 的变量,那么如果:

label = True
if label:
key = 'label'

在这种情况下很简单:

dct[key]

现在,如果 label 为 false 并且我需要访问嵌套字典,我如何动态指定它,这样我就不需要在每个迭代项上使用 ifs (我的意思是每次检查是否使用 label而不是 value,因为我会在充满 dct 字典的字典上开始迭代之前知道这一点)?

喜欢:

label = False
if label:
key = 'label'
else:
key = 'config..?' # it should be something like ['config']['value']

最佳答案

扩展@Barun的工作,并可能帮助回答@Bhavani关于在嵌套字典中设置值的问题,这里是动态访问或设置嵌套字典键的通用解决方案。 Python 3.7。

from typing import List

class DynamicAccessNestedDict:
"""Dynamically get/set nested dictionary keys of 'data' dict"""

def __init__(self, data: dict):
self.data = data

def getval(self, keys: List):
data = self.data
for k in keys:
data = data[k]
return data

def setval(self, keys: List, val) -> None:
data = self.data
lastkey = keys[-1]
for k in keys[:-1]: # when assigning drill down to *second* last key
data = data[k]
data[lastkey] = val

您只需将字典包装在此类的实例中,然后通过传递键列表来获取和设置。

dct = {'label': 'A', 'config': {'value': 'val1'}}

d = DynamicAccessNestedDict(dct)
assert d.getval(["label"]) == "A"
assert d.getval(["config", "value"]) == "val1"

# Set some new values
d.setval(["label"], "B")
d.setval(["config", "value"], "val2")

assert d.getval(["label"]) == "B"
assert d.getval(["config", "value"]) == "val2"

关于python - 动态访问嵌套字典键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39818669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com