gpt4 book ai didi

python - 在 Python 中存储字典路径

转载 作者:太空狗 更新时间:2023-10-29 21:21:19 24 4
gpt4 key购买 nike

Python 新手,假设我有一个字典:

kidshair = {'allkids':{'child1':{'hair':'blonde'},
'child2':{'hair':'black'},
'child3':{'hair':'red'},
'child4':{'hair':'brown'}}}

如果 child3 定期更换头发颜色,我可能想编写一个应用程序来加速数据维护。在这个例子中我会使用:

kidshair['allkids']['child3']['hair'] = ...

有什么方法可以将此路径存储为变量,以便我可以随意访问它?显然

mypath = kidshair['allkids']['child3']['hair']

导致 mypath = 'red'。是否有任何可能的方法来硬编码路径本身,以便我可以使用:

mypath = 'blue' 

代表

kidshair['allkids']['child3']['hair'] = 'blue'

非常感谢,ATfPT

最佳答案

根据您的需要,最简单的选择可能是使用元组作为字典键而不是嵌套字典:

kidshair['allkids', 'child3', 'hair']
mypath = ('allkids', 'child3', 'hair')
kidshair[mypath]

唯一的问题是您无法获取字典的一部分,因此,例如,您无法(轻松/有效地)访问与 'child3' 相关的所有内容.根据您的使用情况,这可能是也可能不是适合您的解决方案。

您当前结构的替代方法是执行以下操作:

>>> from functools import partial
>>> test = {"a": {"b": {"c": 1}}}
>>> def itemsetter(item):
... def f(name, value):
... item[name] = value
... return f
...
>>> mypath = partial(itemsetter(test["a"]["b"]), "c")
>>> mypath(2)
>>> test
{'a': {'b': {'c': 2}}}

这里我们创建了一个函数 itemsetter(),它(按照 operator.itemgetter() 的思路)为我们提供了一个在给定字典中设置相关键的函数。然后我们使用 functools.partial使用我们想要预填充的 key 生成此函数的一个版本。它也不完全是 mypath = blue,但还不错。

如果您不想费心制作与 operator 模块一致的内容,您可以简单地执行以下操作:

def dictsetter(item, name):
def f(value):
item[name] = value
return f

mypath = dictsetter(test["a"]["b"], "c")

mypath(2)

关于python - 在 Python 中存储字典路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371732/

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