使用键列表访问嵌套字典项目
处理复杂的字典结构时,遍历它们以访问特定项目可能是一个常见的挑战。找到一种有效且灵活的方法来浏览这些字典至关重要。
考虑一下您有一个嵌套字典的场景,例如:
dataDict = { "a": { "r": 1, "s": 2, "t": 3 }, "b": { "u": 1, "v": { "x": 1, "y": 2, "z": 3 }, "w": 3 } }
您可能需要使用以下列表来访问这些项目键,例如 ["a", "r"] 或 ["b", "v", "y"]。虽然下面的方法可能有效:
# Get a given data from a dictionary with position provided as a list def getFromDict(dataDict, mapList): for k in mapList: dataDict = dataDict[k] return dataDict
使用Python的reduce()存在一种更有效的方法:
from functools import reduce # forward compatibility for Python 3 import operator def getFromDict(dataDict, mapList): return reduce(operator.getitem, mapList, dataDict)
这种改进的方法利用reduce来遍历字典,使用运算符.getitem 函数使用键列表访问每个嵌套项目。
对于设置值,我们可以利用 getFromDict 来找到正确的值'parent' 字典,然后赋值:
def setInDict(dataDict, mapList, value): getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
此方法有效地遍历字典到数据结构中的适当位置并更新值。
最后,我们可以提供 Snake_case函数名称并扩展这些函数以处理混合数据类型,从而产生:
from functools import reduce # forward compatibility for Python 3 import operator def get_by_path(root, items): return reduce(operator.getitem, items, root) def set_by_path(root, items, value): get_by_path(root, items[:-1])[items[-1]] = value def del_by_path(root, items): del get_by_path(root, items[:-1])[items[-1]]
这些函数提供了一种多功能实用程序,用于导航和操作嵌套字典、列表或两者的混合。
以上是如何在 Python 中使用键列表高效访问和修改嵌套字典项?的详细内容。更多信息请关注PHP中文网其他相关文章!