Сортировка списка на основе значений внутри его элементов - PullRequest
0 голосов
/ 02 мая 2018

У меня есть список, который содержит элементы:

['16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2'
 '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1'
 '16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3'
 '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']

Я хочу отсортировать этот список по числу после 'Count ='. Я не могу сделать это с помощью .sort (key = lambda x: x [37]), как было сказано здесь , потому что мои цифры становятся двойными, тройными, ... цифрами , Как я могу отсортировать этот список без использования регулярных выражений?

(Пожалуйста, не слишком длинный список, я написал обобщенную версию списка выше)

Ответы [ 4 ]

0 голосов
/ 02 мая 2018
lst = ['16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2',
       '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1',
       '16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3',
       '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']

count_dict = {}

for elem in lst:
    temp_list = elem.split(',')
    count = temp_list[2]

    new_count = int(count.split('=')[1])

    count_dict[new_count] = elem

new_list = []

for count in sorted(count_dict):
    new_list.append(count_dict[count])
0 голосов
/ 02 мая 2018

Это делает это:

to_sort = ['16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3',
           '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1',
           '16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2',
           '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']
def key(x:str):
    return int(x.partition("Count=")[2].partition(",")[0])

print(sorted(to_sort, key=key))
0 голосов
/ 02 мая 2018

Без регулярных выражений и предполагая одинаковый формат для всех ваших строк, вы можете сделать это:

mylist.sort(key = lambda x: int(''.join([i for i in x.split(',')[2] if i.isnumeric()])))

Понимание списка [i for i in x.split(',')[2] if i.isnumeric()] разбивает вашу строку на запятые, берет элемент с индексом 2 (который будет "Count=___") и извлекает все числовые строки. Затем int(''.join объединяет их вместе и приводит к целому числу. Затем вы можете использовать это в качестве ключа для сортировки списка.

0 голосов
/ 02 мая 2018
lst = ['16:11:40.894 0,Type=IsXover,Count=1,lp-isD=2',
       '16:11:40.894 0,Type=IsXover,Count=54,lp-xsD=1',
       '16:11:40.894 0,Type=IsXover,Count=201,lr-isD=3',
       '16:11:40.894 0,Type=IsXover,Count=3075,lp-gsD=5']

def extract_num(text):
    txt1 = text[text.find("Count=")+6:]
    txt2 = txt1[:txt1.find(",")]
    return int(txt2)

lst.sort(key=extract_num)

print(lst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...