2017-02-23 19 views
1

私はネストされたリストを持っている:ネストされたリストの値をPythonのdictに置き換えますか?

my_list = ['a','b','c','dog', ['pig','cat'], 'd'] 

とのdict:

my_dict = {'dog':'c','pig':'a','cat':'d'} 

私はリストを取得するように、辞書を使用したい:

new_list = ['a', 'b', 'c', 'c', ['a', 'd'], 'd'] 

私は」次のようなものを試しました:

new_list = [] 
for idx1, item1 in enumerate(my_list): 
    for idx2, item2 in enumerate(item1): 
     new_list[idx1][idx2] = my_dict[item2] 

item2dictに存在しない場合はエラーとなります。これを行うより良い方法はありますか?

答えて

5

リストの理解を使用して結果を生成する簡単な再帰関数を書くことができます。あなたのリスト上のアイテムがリストの場合、再帰、それ以外の項目を変換するために、デフォルトのパラメータでdict.getを使用します。

my_list = ['a','b','c','dog', ['pig','cat'], 'd'] 
my_dict = {'dog':'c','pig':'a','cat':'d'} 

def convert(l, d): 
    return [convert(x, d) if isinstance(x, list) else d.get(x, x) for x in l] 

print(convert(my_list, my_dict)) 

出力:あなたはリットルの池を見て

['a', 'b', 'c', 'c', ['a', 'd'], 'd'] 
1

あなたはに代用しようとしていますネストされたリスト

def replace_vals(_list, my_dict): 
    new_list = [] 
    for item in _list: 
     if isinstance(item, list): 
       new_list.append(replace_vals(item, my_dict)) 
     elif item in my_dict: 
      new_list.append(my_dict.get(item)) 
     else: 
      new_list.append(item)  
    return new_list 

print replace_vals(my_list, my_dict) 
0
my_list = ['a','b','c','dog', ['pig','cat'], 'd'] 
my_dict = {'dog':'c','pig':'a','cat':'d'} 


def replace(item): 
    if item in my_dict: 
     return my_dict[item] 
    else: 
     return item 
new_list=[]; 
for item in my_list: 
    if isinstance(item,list): 
     temp_list=[] 
     for subitem in item: 
      temp_list.append(replace(subitem)) 
     new_list.append(temp_list) 
    else: 
     new_list.append(replace(item)) 
print new_list 

my_list内部リストは、それ自体にネストされている場合、コードのこの作品は動作しません。これは再帰的にあなたのための値を交換します。この機能を試してみてください。

関連する問題