通过代数运算的结果对对象字典进行排序

时间:2014-02-19 16:31:02

标签: python sorting dictionary

说,我已经定义了这个类:

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'

有没有像这样的字典排序?或者我必须先预处理它来创建代数结果然后进行相应的排序?

1 个答案:

答案 0 :(得分:5)

你可能更好地使用一些匿名函数aka lambda

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