2014-02-19 25 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 Callable對象,而不是屬性的值。所以上面的代碼給出了這個錯誤:

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

是否有任何問題來排序這樣的字典?或者我必須預處理它才能先創建代數結果然後進行相應的排序?

+2

詞典不能進行排序。你首先需要一個OrderedDict。但你真的有字典或清單嗎? –

+0

'operator.attrgetter('x')'是一個函數。它不能是int()函數的參數。考慮使用lambdas。 – 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)))