2016-06-12 70 views
1

我有一个'name': Obj条目的字典,其中每个Obj有一个num参数,它带有一个有符号的整数。我想将其转换为OrderedDict,其中条目按正数Obj.num值排序,然后按负数排序。排序整数正然后负

排序整体是没有问题的:

>>> data = OrderedDict(sorted(data.items(), key=lambda tt: tt[1].num)) 
>>> print([val.num for key, val in data.items()]) 
[-5, -2, -1, 1, 2, 10, 100] 

但我想落得之一:
[1, 2, 10, 100, -5, -2, -1]

[1, 2, 10, 100, -1, -2, -5]

我怎样才能做到这一点?

回答

3

反向排序,先用x >= 0得到正数,-负数放在最后的数字,并保持正数从低到高的顺序。

l = [-5, -2, -1, 1, 2, 10, 100] 

print(sorted(l, key=lambda x: (x >= 0, -x), reverse=True)) 

为了您的字典:

OrderedDict(sorted(data.items(), key=lambda tt: (tt[1].num >= 0, -tt[1].num , reverse=True))) 
+0

也扭转了积极作用...... – DilithiumMatrix

+0

是的,我忘了'-x',应该给你'[1,2,10,100, - 5,-2,-1]' –

+0

真棒 - 谢谢!当'key'是一个元组时会发生什么? – DilithiumMatrix