Как сделать сортировку массива по ключевому слову

['1_1_Oleg', '1_2_Oleg', '1_3_Oleg', 
 '1_4_Oleg', '1_5_Oleg', '1_6_Oleg', 
 '2_1_Maks', '2_2_Maks', '2_3_Maks', 
 '2_4_Maks']

Из массива по форме \

{Номер поста} _ {Номер фотографии} _ {Имя Актёра} \

нужно сделать сортировку по Номеру поста и Номеру фотографии, а потом выводилось Имя Актёра


Ответы (3 шт):

Автор решения: S. Nick

попробуйте так:

_list = [
    '1_1_Oleg1', 
    '1_2_Oleg', 
    '1_3_Oleg3', 
    '1_4_Oleg2', 
    '1_5_Olega', 
    '1_6_Olegn', 
    '2_1_Maks4', 
    '2_2_Maks2', 
    '2_3_Maks3', 
    '2_4_Maks1'
]

print(*sorted(_list, key=lambda v: (v[0], v[2], v[4:])), sep='\n')
→ Ссылка
Автор решения: Zhihar

Из массива по форме {Номер поста} _ {Номер фотографии} _ {Имя Актёра} нужно сделать сортировку по Номеру поста и Номеру фотографии

arr = ['1_1_Oleg', '1_2_Oleg', '1_3_Oleg', '1_4_Oleg', '1_5_Oleg', '1_6_Oleg', '2_1_Maks', '2_2_Maks', '2_3_Maks', '2_4_Maks']

res = sorted(list(map(lambda obj: (int(obj.split('_')[0]), int(obj.split('_')[1]), obj.split('_')[2]), arr)))

for obj in res:
    print(*obj)

а потом выводилось Имя Актёра

концовка совсем запутала :)

в общем вот вам код сортировки по номеру поста и номеру фотографии

→ Ссылка
Автор решения: Namerek

Если привести все цифры к int, то все отсортируется правильно:

lst = [
    '1_1_Oleg1', 
    '1_2_Oleg', 
    '1_3_Oleg3', 
    '1_4_Oleg2', 
    '1_5_Olega', 
    '1_6_Olegn', 
    '2_4_Maks1',
    '2_1_Maks4', 
    '2_2_Maks2', 
    '11_3_Maks3', 
]

def sortlst(val: str):
  n1, n2, string = val.split('_')
  return int(n1), int(n2), string

print(*sorted(lst, key=sortlst), sep='\n')

# 1_1_Oleg1
# 1_2_Oleg
# 1_3_Oleg3
# 1_4_Oleg2
# 1_5_Olega
# 1_6_Olegn
# 2_1_Maks4
# 2_2_Maks2
# 2_4_Maks1
# 11_3_Maks3

Вот так будет выглядеть если использовать строковые значения для сортировки

lst = [
    '1_1_Oleg1', 
    '1_2_Oleg', 
    '1_3_Oleg3', 
    '1_4_Oleg2', 
    '1_5_Olega', 
    '1_6_Olegn', 
    '2_4_Maks1',
    '2_1_Maks4', 
    '2_2_Maks2', 
    '11_3_Maks3', 
]
print(*sorted(lst, key=lambda v: v.split('_')), sep='\n')
# 1_1_Oleg1
# 1_2_Oleg
# 1_3_Oleg3
# 1_4_Oleg2
# 1_5_Olega
# 1_6_Olegn
# 11_3_Maks3
# 2_1_Maks4
# 2_2_Maks2
# 2_4_Maks1
→ Ссылка