Python中如何实现按键访问时自动更新条目值的字典
访问键时自动更新值的特殊字典实现方案
完全可以实现。原代码所有柱子显示为同一种红色,根源是字典初始化阶段就执行了next(color_it),把返回的第一个固定值'r'存在了键fc下,后续访问字典不会再触发迭代器的next调用,自然拿不到后续的循环颜色。
实现思路
自定义继承自原生dict的类,重写键访问的核心方法__getitem__:初始化字典时不存计算完成的固定值,而是存「能生成最新值的可调用逻辑」,每次访问键的时候自动执行对应逻辑,返回最新的计算结果。
可直接运行的示例代码
import matplotlib.pyplot as plt from itertools import cycle class AutoUpdateDict(dict): def __getitem__(self, key): val = super().__getitem__(key) # 访问键时如果存的是可调用对象,自动执行取返回值 return val() if callable(val) else val color_it = cycle('rbg') # 红-蓝-绿循环 # 存值时用lambda包装取值逻辑,不要直接执行next PARAMS = AutoUpdateDict({ "fc": lambda: next(color_it) }) Data = {1:1, 2:2, 3:3} for k, it in Data.items(): # **拆包传参时会自动触发__getitem__,拿到最新的颜色值 plt.bar(k, it, **PARAMS) plt.show()
使用注意事项
- 如果参数本身就是可调用对象(比如回调函数),不要直接存入字典,可以额外加一层包装、或者给需要自动更新的条目加特殊标记做区分,避免被误执行。
- 这种实现的复用性很高,除了循环颜色,还可以存动态计算的线宽、透明度、标记样式等逻辑,大规模绘图时不用在循环里重复写参数更新代码。
内容的提问来源于stack exchange,提问作者ZubBat
相关产品推荐
相关产品推荐

