У меня есть несколько строк ниже:
123123|00|992|1111
222222|2222|19|922
997997|3333|922|77
Как я могу отформатировать это (по лен):
123123|1111|00|992
222222|2222|19|922
997997|3333|77|922
Возможный дубликат Сортировать список строк по их длине
Это не дубликат, вопрос непонятный.






Использование str.split и str.join с sorted
Демо:
s = """123123|00|992|1111
222222|2222|19|922
997997|3333|922|77"""
data = ["|".join(sorted(i.split("|"), key=len, reverse=True)) for i in s.split("\n")]
print( "\n".join(data) )
Выход:
123123|1111|992|00
222222|2222|922|19
997997|3333|922|77
Попробуй это
a='''123123|00|992|1111
222222|2222|19|922
997997|3333|922|77'''
'\n'.join(['|'.join(sorted(e.split("|"),key=len,reverse=True)) for e in a.split("\n")])
Выход:
123123|1111|992|00
222222|2222|922|19
997997|3333|922|77
Порядок сортировки OP не основан на длине строки, так как длина 2 предшествует длине 3 (самые последние два сегмента)
для этой цели необходимо настраиваемое сопоставление сортировки
ranks = {6:0, 4:1, 2:2, 3:3}
text = """123123|00|992|1111
222222|2222|19|922
997997|3333|922|77"""
result = '\n'.join(['|'.join(sorted(line.split('|'),key=lambda x: ranks[len(x)]))
for line in text.split('\n')])
print(result)
# outputs:
123123|1111|00|992
222222|2222|19|922
997997|3333|77|922
Я в замешательстве. Если вы сортируете по len, почему 00 стоит перед 992?