PYTHON Список сортировки с пустыми, строковыми и числовыми c значениями - PullRequest
0 голосов
/ 18 июня 2020

Я хочу отсортировать короткий список, например:

# we can have only 3 types of value: any string numeric value like '555', 'not found' and '' (can have any variation with these options)
row = ['not found', '', '555']

до

# numeric values first, 'not found' less prioritize and '' in the end
['555', 'not found', ''] 

Я пытаюсь использовать

row.sort(key=lambda x: str(x).isnumeric() and not bool(x))

, но он не работает

Как мне это отсортировать? (numeri c значения сначала, 'not found' меньше приоритета и '' в конце)

Ответы [ 4 ]

1 голос
/ 18 июня 2020

Изменить: сортировка нечисловых c значений по запросу

ar = [i for i in row if not i.isnumeric()]
ar.sort(reverse=True)
row = [i for i in row if i.isnumeric()] + ar
1 голос
/ 18 июня 2020
def custom_sort(list):
    L1 = []
    L2 = []
    L3 = []
    for element in list:
        if element.isnumeric():
            L1.append(element)
        if element == 'Not found':
            L2.append(element)
        else : L3.append(element)
    L1.sort()
    L1.append(L2).append(L3)
    return L1
0 голосов
/ 18 июня 2020

Это тоже подойдет:

row = ['not found', '', 555, 1, '5' , 444]
print(row)

def func(x):
    if str(x).isnumeric():
        return  1/-int(x) # ordering numerics event if they are strings 
    elif str(x) == 'not found':
        return  2
    elif str(x) == '':
        return  3

row2 = row.sort(key=func)

print(row)

Результаты:

['not found', '', 555, 1, '5', 444]
[1, '5', 444, 555, 'not found', '']
0 голосов
/ 18 июня 2020

Это отсортирует ваш список и предоставит 'not found' более высокий приоритет, чем '':

l = [int(a) for a in row if a.isnumeric()] # Or float(a)
l.sort()
row = [str(a) for a in l] +\
    ['not found'] * row.count('not found') +\
    [''] * row.count('')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...