比较 Python 中嵌套字典的值 3

Comparing values from nested dictionaries in Python 3

我有一些代码使用嵌套字典来保存线性回归的结果。该程序对多组数据('targets')进行回归,并将每个目标的回归变量存储为字典,这些字典包含在另一个字典中,以目标名称为键,值为保存变量的字典。它是这样初始化的(注意 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' 键的最大值,而不必创建一个单独的列表作为中间人。

我能想到的唯一方法就是这个。你基本上做了 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)

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

生成器理解可能会有所帮助:

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