2014-02-19 2 views
1

, 나는 정의이 클래스가 있다고 가정 :대수 연산의 결과에 의해 개체의 사전을 정렬

class A: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

속성의 X 가정이, y는 내가 'A'개체의 사전을 가지고, 정수 값을 길게 -하자 'a_dict'를 호출하십시오. x와 y에 의한 대수 연산의 결과에 따라이 사전을 정렬하고 싶습니다.

a_dict_sorted = sorted(a_dict.values(), key=100*int(operator.attrgetter('x'))/(float(operator.attrgetter('x')) + float(operator.attrgetter('y'))) 

분명히 operator.attrgetter 오히려 그 속성의 값보다는 호출 객체를 반환 : 나는 이것을 시도했다. 따라서 위의 코드는 다음과 같은 오류를 나타냅니다.

TypeError: int() argument must be a string or a number, not 'operator.attrgetter' 

그런 사전을 정렬하는 데 문제가 있습니까? 또는 먼저 대수 결과를 생성하기 위해 사전 처리해야합니다.

+2

사전 정렬 할 수없는 익명 함수를 사용하여 아마 더 낫다. 먼저 'OrderedDict'가 필요합니다. 그러나 당신은 진짜로 dict 또는 명부가 있는가? –

+0

'operator.attrgetter ('x')'는 함수입니다. 'int()'함수의 인수가 될 수 없습니다. 람다 사용을 고려하십시오. – Bach

+1

@PauloBu 사전의 키나 값을 가져 와서 정렬 된 목록을 생성 할 수 있습니다. OP가하는 일이 바로 그 것입니다. 당신은 전문 용어에 대해 초조하게 말하고 있습니다. – delnan

답변

5

당신은 일명 lambda

a_dict_sorted = sorted(a_dict.values(), key = lambda a: 100*int(a.x/(a.x + a.y))) 
관련 문제