[英]python: replace item in a list with items in a another list
我有一本字典:
d = {'name': ['sarah', 'emily', 'brett'], 'location': ['LA', 'NY', 'Texas']}
我也有一个清单:
l = ['name', 'location']
我想用字典d
的列表['sarah', 'emily', 'brett']
替换列表l
中的“名称”(位置相同)。
因此结果将是:
l = ['sarah', 'emily', 'brett', 'LA', 'NY', 'Texas']
for item in l:
l.append(d[item])
l.remove(item)
这就是我所做的,但出现类型错误,无法哈希的类型:“列表”。 我应该怎么做才能解决这个问题?
如果要迭代列表中的项目,则不要在循环内更改列表。
尝试创建一个新的,然后重命名。 垃圾收集器将处理l
的旧版本。
new_l = []
for item in l:
new_l.extend(d[item])
l = new_l
最简单的解决方案是创建一个新列表:
l = [y for x in l for y in d[x]]
结果是展平的替换项目:
print l
>>> ['sarah', 'emily', 'brett', 'LA', 'NY', 'Texas']
使用此代码:
l = [d.get(k, k) for k in l]
循环时不要更改列表,因为不会通知迭代器您所做的更改。
要替换它们,只需生成一个新的包含d
列表(其中包含l
项)的列表即可。
[d[item] for item in l]
如果不确定l
中的所有项是否是d
中的键,则可以在尝试从d
获取之前添加test:
[d[item] for item in l if d.has_key(item)]
用.extend()替换.append()
tmp = []
for i in l:
tmp.extend(d[i])
l = tmp
就我而言,列表中的项目仅部分显示在字典中。 为了避免错误,我使用了:
[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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.