2017-07-20 16 views
-1

例:Python 1つのリストの値を辞書の値と置き換える方法は?

def replace(list, dictionary): 
    for i in list: 
     for k in dictionary: 
      list = list.replace(k, dictionary[k]) 
    return list 
print replace(input_file,curaw_dict) 

が、私が受け取るたびに、結果は以下のようである:

goode 
niced 
good 
nice 

私のリストは、['tree','world','tre','worl']

私の辞書には{'tre':'good','worl':nice}

私のスクリプトです

どのように私はそれをより正確に行うことができます はそれ

+0

変数名として 'list'を使用しないでください:

replaced_list = [x if x not in my_dict else my_dict[x] for x in my_list] 

私はあなたが何ができる機能が必要な場合は推測します。それは同じ名前の関数を潰した – dawg

+1

私はあなたが入力したコードを実行したとは思わない。 'list'には' replace'というメソッドはありません。エラーを正確に示す最短のプログラムを作成して、そのプログラムをあなたの質問にコピー・ペースト(決して再入力しないでください)してください。詳細は、[mcve]を参照してください。 –

+0

最初のリストにあるコンマは何ですか? –

答えて

0

for k in dictionary:たくさん

tree 
world 
good 
nice 

などのおかげで辞書内の項目を反復処理するための正しい方法ではありませんします。代わりに、リスト内の項目を反復処理し、辞書でそれらをルックアップするために enumerateを使用する必要があります。

リストの各項目については
def replace(lst, dictionary): 
    for k,v in enumerate(lst): 
     if v in dictionary: 
      lst[k] = dictionary[v] 
    return lst 

は、kは値のインデックスであり、Vは値そのものです。次に、値がディクショナリにあるかどうかをチェックし、ディクショナリに値がある場合は、リストの値をディクショナリの値に置き換えます。

また、変数名にはlistを指定しないでください。これはPythonの予約語です。あなたは辞書を反復処理する必要はありません

def replace(lst, dictionary): 
    return [item if not item in dictionary else dictionary[item] for item in lst] 
+0

いくつかの発言:1) 'list'は予約語ではありません。それはビルトインのクラス名であり、他の名前と同様に、他のスコープによってシャドウされます。2) 'k in dictionary 'は辞書を反復する正しい方法です。この場合、それは最良のものではありません。 –

0
def replace(list, dictionary): 
    for idx, val in enumerate(list): 
     if i in k: 
      list[idx] = dictionary[list[idx]] 
    return list 
print replace(input_file,curaw_dict) 

あなたは、代わりに、リストの内包表記を使用することができます。 Replaceは部分置換を行いますが、inは辞書にキーが存在するかどうかをチェックします。

0

'key' in dictionaryはキーが辞書に存在するかどうかを確認する方法です:

def replace(list, dictionary): 
    new_list = [] 

    for i in list: 
     if i in dictionary: 
      new_list.append(dictionary[i]) 
     else: 
      new_list.append(i) 

    return new_list 
0
input_file = ['tree', 'world', 'tre', 'worl'] 
curaw_dict = {'tre':'good','worl':'nice'} 

def replace(list, dictionary): 
    return [curaw_dict.get(item, item) for item in list] 
print replace(input_file,curaw_dict) 
0

は、代わりにリストの内包させることができます。

replace = lambda my_dict, my_list: [x if x not in my_dict else my_dict[x] for x in my_list] 

または

def replace(my_list, my_dict): 
    return [x if x not in my_dict else my_dict[x] for x in my_list] 
0
>>> li=['tree', 'world', 'tre', 'worl'] 
>>> di={'tre':'good','worl':'nice'} 
>>> print('\n'.join(di.get(e,e) for e in li)) 
tree 
world 
good 
nice 
+0

このコードスニペットをありがとうございました。すぐに役立つかもしれません。適切な説明は、なぜ*これが問題の良い解決策であるかを示すことによってその教育上の価値を大幅に改善し(// meta.stackexchange.com/q/114762)、将来の同様の、しかし、同一ではない質問。説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

関連する問題