2015-12-22 8 views
0

У меня есть список 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'] 

Я думал, имеющий дикцию, как это, но я уверен, что есть лучший способ TODO это то, что зацикливается на каждом значении?

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

я хотел бы использовать вместо списка в словаре – Netwave

ответ

2

Для этого конкретного набора элементов, вы лучше сортировать их вручную, а просто хранить их отсортированы где-то в вашем приложении:

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

В конце концов, эти размеры приходят из фиксированного набора , поэтому не похоже, что у вас возникнут проблемы с внезапными новыми размерами.

Каждый автоматизированный способ их сортировки потребовал бы, чтобы вы точно выразили этот точный порядок. Да, вы могли бы сказать сортировщику, что S меньше, чем M меньше, чем L и что X-something является более маленьким или большим, чем просто something, но выражают, что логика динамически может быстро усложниться. И все остальные альтернативы также требуют, чтобы вы по сути просто кодировали этот точный порядок выше в некотором роде. Таким образом, вы ничего не получаете, кроме путаницы и шансов на ошибки, если делаете это по-другому.

Обратите внимание, что вы можете использовать вышеуказанный список для сортировки подмножеств этого списка. В качестве примера предположим, что у вас есть магазин, который продает рубашки, а одна специальная рубашка поставляется только в размерах L, S, XL и M. Для того, чтобы сказать клиенту, размеры которых есть, мы хотим, чтобы показать их, но в правильном порядке, так что мы можем сделать следующее:

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

Отличное спасибо, именно то, что мне нужно. –

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'] 
Смежные вопросы