2017-02-23 68 views
1

我有一個嵌套列表:在Python中用dict替換嵌套列表中的值?

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

和字典:

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] 

但是當item2不存在於dict中時出現錯誤。有一個更好的方法嗎?

回答

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列表嵌套在自己這段代碼將無法正常工作。