比较Python 3中嵌套字典的值



我有一些代码,使用嵌套字典来保存线性回归的结果。该程序对多组数据("目标")运行回归,并将每个目标的回归变量存储为字典,这些字典包含在另一个字典中,使用目标名称作为键,值是保存变量的字典。它是这样初始化的(注意,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)

它最多只能节省少量的计算时间,但我希望它能有所帮助。

相关内容

  • 没有找到相关文章

最新更新