2015-12-07 45 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 
相关问题