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

paramsに重みを付けると、たとえば、上記の文にはソートのための2つの条件VALID TILLとAMOUNTがあります。 ユーザが有効な例 ための百分率を提供させるTILL 40% 量:60%複数のパラメータを持つPythonのリストデータをソートする際に、パラメータに重みを与えますか?

私はソーティング機能をカスタマイズすることができ、とにかくあるか、私は考えることができ、複数のランキングのための任意のアルゴリズムがあります?

+0

ソートでは正確に何を行いますか? – Lucas

+0

ソートしてフィルタリングすることを意味しますか、ソートのしきい値となるパーセンテージですか? –

+0

[:10]ステートメントが2つの条件でソートされているトップテンのみを返すことがわかるので、ユーザーが1つのパラメータで60%を必要とし、返す要素のうち6つを取るparamsと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これは、 'amount_list'に代入するときに' valid_till_list [4:] 'をソートする理由です。これは、そのリストの最初の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)] 
関連する問題