2016-05-19 11 views
0

私は辞書を持っていますどのようにソートされたか)。2つのリストの並べ替えリストの1の順序に従って

私は辞書の値のうちのリストを作成し、オーダーリストに内すなわち

orderList(['Peter Smith', 'Karen Samuels', 'Sam Peters', 'Frank Holland', 'Michelle Lee']を渡した場合)

それが返されます。

['Karen Samuels', 'Sam Peters', 'Michelle Lee', 'Peter Smith', 'Frank Holland'] 

どのように対応するのですか私の辞書のキーも、orderListから出力されたものと同じ順序になりますか?私は私の鍵を取ると、それはのようになります。リストの中に入れていた場合、すなわち:

['Harvard', 'Stanford', 'Brown', 'Dartmouth', 'UCLA'] 

カレンサミュエルズがハーバードに最初に返さリストとカレン・サミュエルズマップであるため、だから、たとえば、ハーバード大学は、最初に行く必要があります辞書

+0

順番にユニファイドにマッチしてプッシュする単純なループを実行しますか? – taesu

+0

ディクテーションは順序が整っていますので、オーダーメードディクショナリが必要な場合は、リスト内のアイテムは常にディクティック値ですか? –

答えて

2

基本的に、辞書のキーと値のペアを「反転」したいのですか? これはかなり簡単です:

new_dict = {v:k for k, v in old_dict.items()} 

output = {(expression 1):(expression 2) for (expression 3) in (expression 4)}はdictの理解です。そして

output = {} 
for (expression 3) in (expression 4): 
    output[(expression 1)] = (expression 2) 

に相当し、その後、それを使用します。

inverted_dictionary = {v:k for k, v in original_dictionary.items()} 

out = [inverted_dictionary[i] for i in orderList(original_list)) 

これは、リスト内包表記で、dictの理解と同様に動作します:

output = [(expression 1) for (expression 2) in (expression 3)

output = [] 
for (expression 2) in (expression 3): 
    output.append((expression1)) 
を取得します

(ただし、(式3)は辞書理解であり、(式2)iリスト内包表記は有効な式であり、有効なすべての式が有効な結果をもたらすわけではありません。 (式3)は名前のタプル(",".join(names))でなければなりません。必要に応じて空白がカンマの周りに追加で)

+0

私はこれがOPが望んでいるとは思わない... –

+0

私はそれを編集しました。私は事故でボタンを押した。 – CodenameLambda

+0

「リ」はどこから来たのですか? –

-1
d = {'Dartmouth': 'Peter Smith', 
'Harvard': 'Karen Samuels', 
'Stanford': 'Sam Peters', 
'UCLA': 'Frank Holland', 
'Brown': 'Michelle Lee'} 

#output from orderList function 
orderedList = ['Karen Samuels', 'Sam Peters', 'Michelle Lee', 'Peter Smith', 'Frank Holland'] 

def keyvalues(list): 
    x = [] 
    for i in list: 
     x.append(d.keys()[d.values().index(i)]) 
    return x 
print keyvalues(orderedList) 
+0

なぜマイナスですか?原因を教えてください –

-1

あなたが逆ルックアップテーブルを作成することができ、その後、新しい順に各値のキーに検索を実行します。

>>> d = {'Dartmouth': 'Peter Smith', 
      'Harvard': 'Karen Samuels', 
      'Stanford': 'Sam Peters', 
      'UCLA': 'Frank Holland', 
      'Brown': 'Michelle Lee'} 
>>> dinv = {v: k for k,v in d.items()} 
>>> order = ['Karen Samuels', 'Sam Peters', 'Michelle Lee', 'Peter Smith', 'Frank Holland'] 
>>> [dinv[v] for v in order] 

出力:

['Harvard', 'Stanford', 'Brown', 'Dartmouth', 'UCLA'] 

キーをスキャンするのではなく、ここで行ったように(O(n)余分なメモリとO(n)時間)ルックアップテーブルを作成しておきたいと思います。 2)時間)。

関連する問題