python:将列表中的项替换为另一个列表中的项

时间:2015-12-07 06:14:15

标签: python list dictionary

我有一本字典:

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

我也有一个清单:

l = ['name', 'location']

我想将列表l中的'name'替换为字典['sarah', 'emily', 'brett']中的列表d(位置相同)。

结果将是:

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

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

这就是我所做的,我得到了一个类型错误,不可用的类型:'list'。 我该怎么做才能解决这个问题?

6 个答案:

答案 0 :(得分:1)

如果要迭代该列表的项目,则不应更改循环内的列表。

尝试创建一个新的,然后重命名。垃圾收集器将处理旧版本的l

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

答案 1 :(得分:1)

最简单的解决方案是创建一个新列表:

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

结果是扁平的替代物品:

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

答案 2 :(得分:0)

使用此代码:

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

答案 3 :(得分:0)

循环时不要更改列表,因为迭代器不会被告知您的更改。

要替换它们,只需生成一个包含 seqListToUpdate = [NSMutableDictionary dictionaryWithDictionary:self.bcastSeqNumList] ; 项目所选d个列表的新列表。

l

如果您不确定[d[item] for item in l] 中的所有项目是l中的关键字,您可以在尝试从d获取测试之前添加测试:

d

答案 4 :(得分:0)

用.extend()替换.append()

tmp = []
for i in l:
    tmp.extend(d[i])
l = tmp

答案 5 :(得分:0)

在我的情况下,列表中的项目仅部分显示在字典中。为避免错误,我使用了:

[y for x in l for y in d.get(x,[x])]

当测试数据发生变化时:

l = ['name', 'location', 'test']

结果如下:

print([y for x in l for y in d.get(x,[x])])
>>> ['sarah', 'emily', 'brett', 'LA', 'NY', 'Texas', 'test']