繁体   English   中英

python:用另一个列表中的项目替换列表中的项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM