首页 > 解决方案 > 字母数字字符串的排序列表

问题描述

我有一个字符串列表,每个字符串都类似于 ';2234661;E3006345_2234661_FRONT_Image_Container;\n' 我需要排序。每个字符串都以分号和不同的数字开头,但我需要根据图像角度(例如 FRONT、BACK、LEFT)按照以下排名以非字母顺序对它们进行排序:FRONT BACK LEFT RIGHT INGREDIENTS说明信息营养产品

示例输入:

[';2234661;PRODUCT;', ';2234661;FRONT;', ';2234661;LEFT;', ';2234661;RIGHT;', ';2234661;BACK;', ';2234661;INGREDIENTS;', ';2234661;NUTRITION;', ';2234661;INSTRUCTIONS;', ';2234661;INFO;']

期望的输出

[';2234661;FRONT;', ';2234661;BACK;', ';2234661;LEFT;', ';2234661;RIGHT;', ';2234661;INGREDIENTS;', ';2234661;INSTRUCTIONS;', ';2234661;INFO;', ';2234661;NUTRITION;', ';2234661;PRODUCT;']

这是我的代码,基于我在 stackexchange 上找到的类似问题的解决方案。但是,它返回错误“ValueError: substring not found

galleryImages = [';2234661;PRODUCT;', ';2234661;FRONT;', ';2234661;LEFT;', ';2234661;RIGHT;', ';2234661;BACK;', ';2234661;INGREDIENTS;', ';2234661;NUTRITION;', ';2234661;INSTRUCTIONS;', ';2234661;INFO;']

alphabet = 'FBLRINP'

newGallery = sorted(galleryImages, key=lambda word: [alphabet.index(c) for c in word])

print(newGallery)

标签: pythonstringsortingalphanumeric

解决方案


试试这个..

>>> my_list = [';2234661;PRODUCT;', ';2234661;FRONT;', ';2234661;LEFT;', ';2234661;RIGHT;', ';2234661;BACK;', ';2234661;INGREDIENTS;', ';2234661;NUTRITION;', ';2234661;INSTRUCTIONS;', ';2234661;INFO;']

>>> my_sorting_logic  = ['FRONT', 'BACK', 'LEFT', 'RIGHT', 'INGREDIENTS', 'INSTRUCTIONS', 'INFO', 'NUTRITION', 'PRODUCT']

根据键的索引排序

>>> sorted(my_list, key = lambda x : my_sorting_logic.index(x.split(';')[2]))

输出 :

[';2234661;FRONT;', ';2234661;BACK;', ';2234661;LEFT;', ';2234661;RIGHT;', ';2234661;INGREDIENTS;', ';2234661;INSTRUCTIONS;', ';2234661;INFO;', ';2234661;NUTRITION;', ';2234661;PRODUCT;']

推荐阅读