我有一些代码,使用嵌套字典来保存线性回归的结果。该程序对多组数据("目标")运行回归,并将每个目标的回归变量存储为字典,这些字典包含在另一个字典中,使用目标名称作为键,值是保存变量的字典。它是这样初始化的(注意,self.targets
只是一个不同目标的列表):
self.results = {}
for keys in self.targets:
self.results[keys] = {
'lod': '', 'p': '', 'm': '', 'b': '', 'xr': ''}
在for循环中调用的另一个方法中,为该目标填充字典中的值:
for tar in targets:
...some calculations to produce the values...
self.results[tar].update(
'lod': lod, 'p': p, 'm': m, 'b': b, 'xr': xr)
稍后,我想在一张图上绘制不同的回归。为此,我想从子字典中找到xr
的最大值(xr
是绘制每个回归所需的右界)。
我尝试访问所有xr
值,如self.results[:]['xr']
。这不起作用,所以我在for循环中提取xr
值:
xrs = []
for tar in self.targets:
xrs.append(self.results[tar]['xr'])
,这完成了工作,因为我可以执行max(xrs)
来找到最大的值。但是,我想知道是否有一种更直接的方法来提取'xr'
键的最大值,而不必创建一个单独的列表作为中间人。
生成器理解可能会有所帮助:
data = {
"a" : {'lod': '', 'p': '', 'm': '', 'b': '', 'xr': 0},
"b" : {'lod': '', 'p': '', 'm': '', 'b': '', 'xr': 1}
}
max_xr = max(value["xr"] for value in data.values())
print(max_xr)
我想那应该给你1
。
我能想到的唯一方法是这样的。实际上,您无需填充列表就可以执行max()
所做的操作(假设xr
为>0,否则为themax
使用一个非常负的数字,如-1e-6):
themax = 0 # initialise maximum
for tar in self.targets:
val = self.results[tar]['xr']
if val > themax:
themax = val
print(themax)
它最多只能节省少量的计算时间,但我希望它能有所帮助。