2016-10-24 2 views
0

У меня есть небольшая проблема с сортировкой array, которую я получил от JSON. Список
Сортировка массива python по столбцу с разными типами данных

Пример:


[[1477298500000L, u'C12' , u'Status '],
[1477298510000L, u'C12', Отсутствует],
[1477298520000L, U 'С12', Отсутствует],
[1477298530000L, u'X15' , u'Port '], [
1477298540000L, u'X15', None],
[1477298550000L, u'X15' , u'Status'] ]

Мне нужно сортировать array по последней колонке с null values в конце списка:

[[1477298530000L, u'X15' , u'Port '], [
1477298500000L, u'C12 », u'Status '],
[1477298550000L, u'X15', u'Status '],
[1477298510000L, u'C12', Отсутствует],
[1477298520000L, u'C12' , Отсутствует],
[1477298540000L, u'X15 ', None]]

мне также нужно в reverse order также один и тот же array с null values в конце:


[[1477298500000L, u'C12' , u'Status'], [
1477298550000L, u'X15 », u'Status '],
[1477298530000L, u'X15', u'Port '],
[1477298510000L, u'C12', Отсутствует],
[1477298520000L, u'C12' , Отсутствует],
[1477298540000L, u'X15 ', None]]

ответ

0

Просто сортировать его и обратный список:

In[33]: import operator 
In[34]: test_list = [[1477298500000L, u'C12', u'Status'], 
[1477298510000L, u'C12', None], 
[1477298520000L, u'C12', None], 
[1477298530000L, u'X15', u'Port'], 
[1477298540000L, u'X15', None], 
[1477298550000L, u'X15', u'Status']] 

In[35]: test_list.sort(key=operator.itemgetter(2)) 
In[36]: test_list[::-1] 
Out[36]: 
[[1477298550000L, u'X15', u'Status'], 
[1477298500000L, u'C12', u'Status'], 
[1477298530000L, u'X15', u'Port'], 
[1477298540000L, u'X15', None], 
[1477298520000L, u'C12', None], 
[1477298510000L, u'C12', None]] 
+0

Проблема задним ходом этот список дает мне: –

+0

Этот обратный список также реверсивный я заказываю, если значения одинаковые (первые две строки), и я нуждаюсь в них в обычном порядке. Кроме того, обычно отсортированный список имеет нулевые значения в начале, и мне нужен этот список также с нулевыми значениями в конце. –

0

Я решил свою собственную проблему, создав сравнивающие функции:

def make_comparator(): 
    def compare(x, y): 
    if x[2] is None: 
     return 1 
    elif y[2] is None: 
     return -1 
    elif x[2]>y[2]: 
     return 1 
    elif x[2]<y[2]: 
     return -1 
    else: 
     return 0 
    return compare 

def make_comparator_reverse(): 
    def compare(x, y): 
    if x[2] is None: 
     return 1 
    elif y[2] is None: 
     return -1 
    elif x[2]<y[2]: 
     return 1 
    elif x[2]>y[2]: 
     return -1 
    else: 
     return 0 
    return compare