2017-02-21 15 views
0
ListData= sorted(ListData, key=lambda x: ((x['AvailableOffers'] ['ValidTill'], x['AvailableOffers']['Amount'])), reverse=True)[:10] 

Давая вес параметрам, я имею в виду, например, приведенное выше утверждение имеет два условия для сортировки: VALID TILL AND AMOUNT. ПРЕПЯТСТВОВАТЬ ПОЛЬЗОВАТЕЛЬ обеспечивает процент, например Действительны до: 40% СУММА: 60%Как сортировать данные списка в python с несколькими параметрами, пока весит по параметрам?

так есть в любом случае я могу настроить функции сортировки или есть какие-либо алгоритмы для нескольких рейтингов я могу рассмотреть ??

+0

Что именно делают весы при сортировке? – Lucas

+0

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

+0

[: 10], поскольку вы можете видеть, что операторы возвращают только первую десятку, которая сортируется по двум условиям, так что я хочу, если пользователь говорит, что мне нужно 60% для одного параметра, который имеет значение для принятия 6 возвращаемых элементов и 4 к другому! – MUHAMMAD

ответ

0

Используя 4 и 6 суммы, которые вы упомянули в посте, вы можете сделать следующее:

valid_till_list = sorted(
    ListData, 
    key=lambda x: x['AvailableOffers']['ValidTill'], 
    reverse=True, 
) 
amount_list = sorted(
    valid_till_list[4:], 
    key=lambda x: x['AvailableOffers']['Amount'], 
    reverse=True, 
) 
final_list = valid_till_list[:4] + amount_list[:6] 
+0

Спасибо, человек! но разве вы не думаете, что этот способ может привести к дублированию? – MUHAMMAD

+0

@MUHAMMAD вот почему вы сортируете 'valid_till_list [4:]' при назначении 'amount_list'. Это означает, что первые 4 элемента этого списка не будут присутствовать в 'amount_list' – Lucas

+0

спасибо, я попробую тестирование! – MUHAMMAD

0

Этот пост должен быть в виде комментария к вашему вопросу, так как это просьба к Вам для уточнения вашего сообщения больше. Но у меня нет достаточной репутации, поэтому она появляется здесь.

Первое состоит в том, что function sorted взять iterable, такие как список, массив и строки в качестве параметра. Кажется, что ваш ListData - это словарь . Поэтому необходимо, чтобы вам сначала нужно преобразовать данные в соответствующую форму.

Какова конечная формула x[][ValidTill], x[][Amount] и их percentage являются параметрами? Например, вы имеете в виду сумма из них? Если да, то ниже приведена процедура:

# python ver 3.5. Note that the below code need to be adjusted 
# a little bit to be able to run on python 2.x. 

import random 

ListData = { 
'AvailableOffers': { 
    'ValidTill': [random.randint(1,10) for i in range(100)], 
    'Amount': [random.randint(1,10) for i in range(100)] 
}} 

# Convert from dictionary to list 
ListDataIter = list(zip(ListData['AvailableOffers']['ValidTill'], ListData['AvailableOffers']['Amount'])) 

# Now let have the percentage parameter inputted by users 
FirstParam, SecondParam = 0.4, 0.6 

# Sorting ListDataIter 
sorted(ListDataIter, key=lambda x: x[0] * FirstParam + x[1] * SecondParam, reverse=True)[:10] 

[(10, 10), 
(10, 10), 
(9, 10), 
(9, 10), 
(9, 10), 
(10, 9), 
(7, 10), 
(7, 10), 
(8, 9), 
(9, 8)]