Python OOP-如何在嵌套字典中生成引用键的变量?

Python OOP-如何在嵌套字典中生成引用键的变量?,python,dictionary,Python,Dictionary,我有一本字典: my_dict = {1: {2: 'A'}, 2: {3: 'B'}, 3: {4: 'C}} 我想以字符串形式创建变量,称为标记,可以引用嵌套键。 例如:“mymarker”指我的my dict[1][2],而“MyThermarker”指我的my dict[2][3]。 它们是字符串,所以我可以在我的一个方法中分配它们,例如:set_marker'mymarker',1,2。如何在代码中实现这一点 由于嵌套字典不需要一个键就可以获得内部值,因此没有直接执行所需操作的方法。

我有一本字典:

my_dict = {1: {2: 'A'}, 2: {3: 'B'}, 3: {4: 'C}}
我想以字符串形式创建变量,称为标记,可以引用嵌套键。 例如:“mymarker”指我的my dict[1][2],而“MyThermarker”指我的my dict[2][3]。
它们是字符串,所以我可以在我的一个方法中分配它们,例如:set_marker'mymarker',1,2。如何在代码中实现这一点

由于嵌套字典不需要一个键就可以获得内部值,因此没有直接执行所需操作的方法。你需要几把钥匙。但是,如果您愿意,您可以将多个键存储在一起,也许可以存储在一个元组中。然后,如果不总是索引到相同的深度,则可以在循环中使用这些值,如果总是索引到相同的深度,则可以通过解包来使用这些值

试着这样做:

my_dict = {1: {2: 'A'}, 2: {3: 'B'}, 3: {4: 'C'}}
mymarker = (1, 2)
myothermarker = (2, 3)

a, b = mymarker     # you can use unpacking when you know you're indexing to a specific depth
print(my_dict[a][b])

d = my_dict
for key in myothermarker:    # or use a loop, for indexing to any depth
    d = d[key]
print(d)
您已经说过,您希望标记值是字符串,将其与键一起传递到set_marker函数,然后您可以稍后调用set_with_marker来修改主词典中键引用的值。这与我上面描述的技术结合起来并不难,您只需要在字符串标记和它们所指的键之间添加一层间接寻址

下面是一个快速、未经测试的实现,它可以实现您想要的功能:

markers = {}
def set_marker(name, *keys):
    markers[name] = keys       # save the keys into the markers dict (as lists)

def get_with_marker(name):
    d = my_dict
    for key in markers[name]:  # this is almost the same as the loop from above
        d = d[key]
    return d

def set_with_marker(name, value):
    *keys, last = markers[name] # unpack last name separately from the others
    d = my_dict
    for key in keys: # this is similar to before, but we don't index the last level yet
        d = d[key]
    d[last] = value  # we index the last level here, for the assignment

您可能希望这些函数是某些类的方法,my_dict是实例属性。除了在一堆地方添加self之外,它不会显著改变代码。

您需要更多地说明这些标记需要做什么。为什么它们是字符串?它们是字符串,所以我可以在我的一个方法中分配它们,例如:set_marker'mymarker',1,2 anks for the idea,didn't think tuple。有没有一种方法可以将标记作为字符串,因为我需要多个标记来引用不同的键我不知道你的意思。字典中的键是数字,所以你需要从某处获取数字。也许可以使用从标记字符串到键元组的字典映射?我有一个setter方法,其工作原理如下:set_marker'markergoesher',1,2,我需要能够对多个标记执行此操作。标记应该能够返回“A”,我应该能够将“A”更改为不同的值您可以编写这样的函数,但我不确定您所说的标记应该能够返回“A”是什么意思。标记只是一个字符串,它不返回任何内容。使用set_标记设置后,是否将其传递给另一个方法?如果您需要帮助,所有这些内容都应该在问题中。我为问题中的信息不足道歉,是的,我会将其传递到另一种方法中。例如,设置标记“mymarker”时,“B”应将“A”更改为“B”。