2016-06-12 67 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