2016-03-19 13 views
1

リストに基づいて辞書のキーを値として検索し、後でキーをタプルのリストに追加するソリューションを探しています。私は正しいキーを検索することができますが、私が期待しているリストを構築する方法を見つけることができません。親切な助けを感謝します。辞書のキーをリスト内のタプルに結合する

以下のように、リストlの要素と等しい値を持つdのすべてのキーを見つけて、期待される出力に示されているようにすべての検索キーをタプルのリストに入れたいと思います。

d = {'acutrar': 'acutrar', 
'aguosa': 'aguoso', 
'capitalizareis': 'capitalizar', 
'conocerán': 'conocer', 
'conociéremos': 'conocer', 
'conocían': 'conocer', 
'conocías': 'conocer', 
'conozcas': 'conocer', 
'pales': 'palar', 
'planeareis': 'planear', 
'planearás': 'planear', 
'planeasteis': 'planear', 
'planeáramos': 'planear'} 

l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear'] 

for word in l: 
    for (x,y) in d.items(): 
     if y == word: 
      print(word, x) #I can only search for the keys but don't know how to build that list of tuples 

予想される出力:

[('conocerán','conocías','conozcas','conocían','conociéremos'),('NOT FOUND'),('NOT FOUND'),('planeáramos','planeareis','planearás','planeasteis')] 

答えて

2

あなたの結果は意外にキーと値のブレンドです。

より均質な溶液が

[('conocías', 'conozcas', 'conociéremos', 'conocerán', 'conocían'), 
(), 
(), 
('planeareis', 'planeáramos', 'planeasteis', 'planearás')] 

又はため

[tuple(k for (k,v) in d.items() if v == w) for w in l] 

によって得ることができる。

{'conocer': ('conocías', 'conozcas', 'conociéremos', 'conocerán', 'conocían'), 
'NOT FOUND':(), 
'planear': ('planeareis', 'planeáramos', 'planeasteis', 'planearás')} 
ため

{w:tuple(k for (k,v) in d.items() if v == w) for w in l} 

1

があなたの期待出力を取得するには、あなたがこのようなタプルのリストを構築することができます:検索のリストに反復する必要はありません

for word in l: 
    hits = tuple() 
    for (x,y) in d.items(): 
     if y == word: 
      hits += (x,) 
    if not hits: 
     hits = ('NOT FOUND',) 
    results.append(hits) 

print(results) 
1

ファーストIMO値。

あなただけ行うことができ

final = [] 

for k, v in d.items(): 
    if v in l: 
     final.append(k) 
final = tuple(final) 

しかし、あなたも、以下のようにリストの内包を経由して、それを簡素化することができます:

final = tuple(k for k, v in d.items() if v in l) 
6

なぜが便利/より適切に辞書を変換しません。構造を検索し、すべての項目をループして値を検索する代わりに、キーでO(1)検索を実行します。

from collections import defaultdict 

d = {'acutrar': 'acutrar', 
'aguosa': 'aguoso', 
'capitalizareis': 'capitalizar', 
'conocerán': 'conocer', 
'conociéremos': 'conocer', 
'conocían': 'conocer', 
'conocías': 'conocer', 
'conozcas': 'conocer', 
'pales': 'palar', 
'planeareis': 'planear', 
'planearás': 'planear', 
'planeasteis': 'planear', 
'planeáramos': 'planear'} 


t = defaultdict(list) 
for key, value in d.items(): 
    t[value].append(key) 

l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear'] 

print([t.get(item, [item]) for item in l]) 
枚の

プリント:

[ 
    ['conozcas', 'conociéremos', 'conocías', 'conocerán', 'conocían'], 
    ['NOT FOUND'], 
    ['NOT FOUND'], 
    ['planeáramos', 'planearás', 'planeareis', 'planeasteis'] 
] 
1
d = {'acutrar': 'acutrar', 
'aguosa': 'aguoso', 
'capitalizareis': 'capitalizar', 
'conocerán': 'conocer', 
'conociéremos': 'conocer', 
'conocían': 'conocer', 
'conocías': 'conocer', 
'conozcas': 'conocer', 
'pales': 'palar', 
'planeareis': 'planear', 
'planearás': 'planear', 
'planeasteis': 'planear', 
'planeáramos': 'planear'} 

l = ['conocer', 'NOT FOUND', 'NOT FOUND', 'planear'] 

temp_list = [] 
final_list = [] 

for word in l: 
    temp_list = [] 
    for (x,y) in d.items(): 
     if y == word: 
      temp_list.append(x) 
    if len(temp_list) == 0: 
     temp_list.append(word) 
    final_list.append(tuple(temp_list)) 

print final_list 
関連する問題