2015-12-07 76 views
0

我有一本字典:蟒蛇:在一個列表,在一個又一個列表中的項目替換項目

d = {'name': ['sarah', 'emily', 'brett'], 'location': ['LA', 'NY', 'Texas']} 

我也有一個列表:

l = ['name', 'location'] 

我想在替換「名」列表l與名單['sarah', 'emily', 'brett']在字典d(位置相同的東西)。

那麼結果將是:

l = ['sarah', 'emily', 'brett', 'LA', 'NY', 'Texas'] 

for item in l: 
    l.append(d[item]) 
    l.remove(item) 

這是我做的,我得到了一個錯誤類型,unhashable類型:「名單」。 我應該怎麼做才能解決這個問題?

回答

1

如果您在該列表的項目中進行迭代,則不應更改循環內的列表。

嘗試創建一個新的然後重命名它。垃圾收集器將處理舊版本的l

new_l = [] 
for item in l: 
    new_l.extend(d[item]) 
l = new_l 
+0

提示:使用'new_l.extend()'獲得OP的期望輸出。 –

+1

抓拍@Kevin Guan!剛剛更正,謝謝。 – eguaio

0

最簡單的解決方案是創建一個新的列表:

l = [y for x in l for y in d[x]] 

的結果是扁平取代項目:

print l 
>>> ['sarah', 'emily', 'brett', 'LA', 'NY', 'Texas'] 
0

使用此代碼:

l = [d.get(k, k) for k in l] 
0

當你不在時,不要更改列表選擇,因爲迭代器不會被通知你的變化。

要替換它們,只需生成一個新的包含d列表的l項目。

[d[item] for item in l] 

如果您不能確定在l所有項目都在d鍵,你可以嘗試從d獲得前添加測試:

[d[item] for item in l if d.has_key(item)] 
0

替換.extend .append()()

tmp = [] 
for i in l: 
    tmp.extend(d[i]) 
l = tmp 
相關問題