2017-11-26 10 views
1

二次的な値リストを使用して、Pythonでmysqlカーソルから返されたタプルのリストをソートしようとしています。注文するために使用さ二次リストによるタプルリストのソート、Pythonの欠損値のスキップ

一覧:

[126028, 255872, 252614, 370772, 460757, 2, 412173, 384558, 111669, 232514] 

ソートするタプルのリスト:要素が返される結果に見つからない場合は

[(111669, '4b2c702d01e33f4bf5a816877d186de9.jpg'), 
(126028, 'f34d5dcb7311320a81430076604286a5.jpg'), 
(232514, 'b53ba7b840ce4e9e39c67e1c55af56b1.jpg'), 
(255872, '06225265afb87e7147a611f3e7ec2c4c.jpg'), 
(370772, '50502846b5203bd75a17936962ff37ca.jpg'), 
(384558, '07f3ea5009dbe63bea5211b9c90144cb.jpg'), 
(412173, 'b1e23c2f41e24459c12f1e5299662534.jpg'), 
(460757, 'd1b6a265ac26c327684b562be69641f7.jpg')] 

理想的には、彼らは排除されなければなりません。ここでは、[252614, 2]が見つからなかった値を見ることができる新しいソート順、したがって、彼らは除外されるのです。ここで

[(126028, 'f34d5dcb7311320a81430076604286a5.jpg'), 
(255872, '06225265afb87e7147a611f3e7ec2c4c.jpg'), 
(370772, '50502846b5203bd75a17936962ff37ca.jpg'), 
(460757, 'd1b6a265ac26c327684b562be69641f7.jpg'), 
(412173, 'b1e23c2f41e24459c12f1e5299662534.jpg'), 
(384558, '07f3ea5009dbe63bea5211b9c90144cb.jpg'), 
(111669, '4b2c702d01e33f4bf5a816877d186de9.jpg'), 
(232514, 'b53ba7b840ce4e9e39c67e1c55af56b1.jpg')] 

は、私が試したものです:

btree_ids = [126028, 255872, 252614, 370772, 460757, 2, 412173, 384558, 111669, 232514] 

media_id_list = [(111669, '4b2c702d01e33f4bf5a816877d186de9.jpg'), 
    (126028, 'f34d5dcb7311320a81430076604286a5.jpg'), 
    (232514, 'b53ba7b840ce4e9e39c67e1c55af56b1.jpg'), 
    (255872, '06225265afb87e7147a611f3e7ec2c4c.jpg'), 
    (370772, '50502846b5203bd75a17936962ff37ca.jpg'), 
    (384558, '07f3ea5009dbe63bea5211b9c90144cb.jpg'), 
    (412173, 'b1e23c2f41e24459c12f1e5299662534.jpg'), 
    (460757, 'd1b6a265ac26c327684b562be69641f7.jpg')] 
print(sorted(media_id_list, key=lambda x: btree_ids.index(x[0]))) 
+1

あなた自身の試みですか? –

+0

@WillemVanOnsem – stwhite

+0

コードを追加して、辞書 'd [126028] = f34d5dcb7311320a81430076604286a5.jpg'を作成し、最初のリストを使用して期待どおりの順序で要素を取得することができます。 – furas

答えて

6

あなたのアプローチが動作しているようです(ある程度)が、非常に複雑である:ここsortを使用して

  • やり過ぎと非効率的ですそれがうまく
  • として非効率的だし、あなたのソートリストは、タプルのリストが

私の提案を持っているすべての値を持っていない場合ははい、indexは例外で失敗しては、線形検索を実行:ちょうど作成します入力データから辞書を削除します。

リストの理解度を使用してタプルのリストを作成し、並べ替えリスト(順序を直接提供する)を反復する&キーがソートリストにないアイテムをフィルタリングします。 )ソート・リスト内:

data_in = [(111669, '4b2c702d01e33f4bf5a816877d186de9.jpg'), 
(126028, 'f34d5dcb7311320a81430076604286a5.jpg'), 
(232514, 'b53ba7b840ce4e9e39c67e1c55af56b1.jpg'), 
(255872, '06225265afb87e7147a611f3e7ec2c4c.jpg'), 
(370772, '50502846b5203bd75a17936962ff37ca.jpg'), 
(384558, '07f3ea5009dbe63bea5211b9c90144cb.jpg'), 
(412173, 'b1e23c2f41e24459c12f1e5299662534.jpg'), 
(460757, 'd1b6a265ac26c327684b562be69641f7.jpg')] 

sort_list = [126028, 255872, 252614, 370772, 460757, 2, 412173, 384558, 111669, 232514] 

data_in = dict(data_in) 

data_out = [(k,data_in[k]) for k in sort_list if k in data_in] 

print(data_out) 

で結果:あなたは予想通りsort_listから値を削除すると、正しい、まだ小さく、結果を出すことを確認することができます

[(126028, 'f34d5dcb7311320a81430076604286a5.jpg'), 
(255872, '06225265afb87e7147a611f3e7ec2c4c.jpg'), 
(370772, '50502846b5203bd75a17936962ff37ca.jpg'), 
(460757, 'd1b6a265ac26c327684b562be69641f7.jpg'), 
(412173, 'b1e23c2f41e24459c12f1e5299662534.jpg'), 
(384558, '07f3ea5009dbe63bea5211b9c90144cb.jpg'), 
(111669, '4b2c702d01e33f4bf5a816877d186de9.jpg'), 
(232514, 'b53ba7b840ce4e9e39c67e1c55af56b1.jpg')] 

+0

完璧、ありがとう!私はPythonには新しいので、追加の入力を感謝します。 – stwhite

0

余分なスペースを使ってこれを行うのが良ければ、タプルリストを辞書に変換して、順序リストを反復し、キー/値のペアを回答リストに入れることができます。

tuple_list = dict(tuple_list) 
answer = [] 

for key in order_list:  
    if key in tuple_list: 
     answer.append(key, tuple_list[key]) 
関連する問題