전체 배열에서 직접 두 값을 포함 dicts 및 기타 dicts의 배열 정규화 :I (예 : 행)처럼 보이는 거대한 배열이
[
{
'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)}
}]
볼 수 있듯이, 각 01,236,506 : 여기
수행되는 계산이다이 정규화되었습니다 (최소값을 뺀 다음 값 범위로 나눕니다). 각 키 - 값 쌍은 openValues
과 동일합니다.
어떻게하면됩니까? 이것은 기존 방식이었다로
제가 추가 최대/최소/범위 값 및 dicts를 작성하는 것보다 더 빠른 방법을 찾을 (이는 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()}
이 방법으로 모든 것을 정상화에 한 줄 솔루션이 있습니까?
처럼 위의 코드를 확장 할 수
. 그것은 작동하지 않았다. 파이썬 코드에 어딘가에','가 없습니다. 유효하지 않습니다. –
또한 귀하의 접근 방식은 무엇입니까? 너 뭐 해봤 니? 어디에서 문제를 만났습니까? ** 정확한 질문은 무엇입니까? ** –
'''}'''이후에 16 행에 쉼표가 누락되었습니다. – user1406062