按内容排列的字符串的Python顺序列表



我有一个想要订购的python列表。到目前为止,我只能想到一种方法,那就是有一本字典,根据字典的值取决于位置。

我该如何做得更好?

这些是的值

>>> a = ['Extra large', 'Large', 'Small', 'Medium', 'Extra Small']
>>> b = ['XL', 'XS', 'XXXL', 'L', 'M']

我希望能够生产

>>> a = ['Extra Small', 'Small', 'Medium', 'Large', 'Extra large']
>>> b = ['XS', 'XL', 'M', 'L', 'XXXL']

我想用这样的措辞,但我相信有更好的方法可以做到这一点,那就是循环遍历每个值?

size_mapping = {
    0: ['small', 's'],
    1: ['medium', 'm'],
    2: ['large', 'l']
}

对于这组特定的项目,您最好手动对它们进行排序,并将它们存储在应用程序中的某个位置:

sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL']

毕竟,这些尺码都是固定的,所以你不会突然遇到新尺码的问题。

每一种自动排序的方法都需要你以某种方式表达这个确切的顺序。是的,你可以告诉分类器S小于M小于LX-somethingsomething更小或更大,但动态表示逻辑可能很快变得相当复杂。所有其他的替代方案也需要你以某种方式对上面的确切顺序进行编码。所以,如果你用另一种方式,除了困惑和错误的机会,你什么都得不到。


请注意,您可以使用上面的列表对该列表的子集进行排序。举个例子,假设你有一家卖衬衫的商店,其中一件衬衫的尺码只有LSXLM。为了告诉客户有哪些尺寸,我们想显示这些——但要按照正确的顺序,所以我们可以执行以下操作:

available_sizes = ['L', 'S', 'XL', 'M']
print(available_sizes) # ['L', 'S', 'XL', 'M']
# sort them using the existing sorted list of possible sizes
available_sizes.sort(key=lambda size: sizes.index(size))
print(available_sizes) # ['S', 'M', 'L', 'XL']

此方法将执行

>>> to_sort = ["M","XS","S","L","XL"]
>>> size_d = {"XS":0,"S":1,"M":2,"L":3,"XL":4}
>>> sorted_list = sorted(to_sort, key=lambda x:size_d.get(x,0))
>>> sorted_list
['XS', 'S', 'M', 'L', 'XL']

最新更新