【发布时间】:2016-12-28 05:28:20
【问题描述】:
我有一个巨大的数组,看起来像(示例行):
[
{
'value':21,
'openValues':{
'a':24,
'b':56,
'c':78
}
},
{
'value':12,
'openValues':{
'a':98,
'b':3
}
},
{
'value':900,
'openValues':{
'a':7811,
'b':171,
'c':11211,
'd':4231
}
}
]
我想将每个键中的所有值和键中每个字典中的值标准化为介于 0 和 1 之间。例如:
以下是要执行的计算:
[{
'value':(21-12)/(900-12),
'openValues':{'a':(24-24)/(7811-24),'b':(56-3)/(171-3),'c':(78-78)/(11211-78)}
},
{
'value':(12-12)/(900-12),
'openValues':{'a':(98-24)/(7811-24),'b':(3-3)/(171-3)}
},
{
'value':(900-12)/(900-12),
'openValues':{'a':(7811-24)/(7811-24),'b':(171-3)/(171-3),'c':(11211-78)/(11211-78),'d':(4231-4231)/(4231-4231)}
}]
如您所见,每个value 都经过了标准化(减去最小值然后除以值的范围),并且与openValues 中的每个键值对相同。
我该怎么做?
我想找到一种比创建额外的最大/最小/范围值和字典更快的方法,因为这是我现有的方法(这是计算 openValues 字典的最大值和最小值的示例:
openValuesMin = {}
openValuesMax = {}
for i, dict in enumerate(array):
for property,value in dict['openValues'].items():
if property not in openValuesMax:
openValuesMax[property] = 0
if openValuesMax[property]<value:
openValuesMax[property]=value
if property not in openValuesMin:
openValuesMin[property] = 0
if openValuesMin[property]>value:
openValuesMin[property] = value
openValuesRange = {key: openValuesMax[key] - openValuesMin.get(key, 0) for key in openValuesMax.keys()}
有没有一种以这种方式标准化所有内容的单线解决方案?
【问题讨论】:
-
我试图让你的 dict 可读。那没有用。您的 python 代码在某处缺少
,;无效。 -
还有:你的方法是什么?你试过什么?你在哪里遇到问题? 您的确切问题是什么?
-
}之后的第 16 行缺少逗号 -
注意,感谢您更改格式@MarcusMüller
-
嗨@MarcusMüller 我现在已经把问题说得更清楚了,如果您需要更多说明,请告诉我。
标签: python arrays dictionary normalization