比较 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
。
我有一些代码使用嵌套字典来保存线性回归的结果。该程序对多组数据('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
。