Python按内容排序字符串列表

时间:2015-12-22 11:16:29

标签: 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']
}

2 个答案:

答案 0 :(得分:2)

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

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']

答案 1 :(得分:0)

这种方法可以做到

>>> 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']