Как сделать сортировку массива по ключевому слову
['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