我有一本字典:
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'。 我该怎么做才能解决这个问题?
答案 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']