根据字典映射表替换列表中的元素
Posted
技术标签:
【中文标题】根据字典映射表替换列表中的元素【英文标题】:Replace elements in list based on a dictionary mapping table 【发布时间】:2021-09-18 18:26:54 【问题描述】:我想根据字典映射表替换列表列表中的元素,并尝试如下:
lists_before = [['A', 'B', 'C'], ['A', 'D'], ['D', 'E']]
mapped_dictionary = 'A': 'G', 'B': 'G', 'C':'F'
下面是我使用的代码:
lists_after = []
for element in lists_before:
new_element = []
for letter in element :
if letter in list(mapped_dictionary.values()):
letter = repl_dic.get(letter)
new_element.append(letter)
lists_after.append(new_element)
lists_after 的预期输出是:
[['G', 'G', 'F'],['G','D'],['D','E']]
但是,我得到的输出还是和lists_before一样。
我不知道出了什么问题。有人可以帮我吗?
【问题讨论】:
[[mapped_dictionary.get(char, char) for char in sl] for sl in lists_before]
只是刮一下.values()
。您需要它们位于 dict
中(就像它的键一样)。
【参考方案1】:
你可以这样做:
输入:
l = [['A', 'B', 'C'], ['A', 'D'], ['D', 'E']]
m = 'A': 'G', 'B': 'G', 'C': 'F'
代码:
l_new = list()
for lst in l:
lst_new = list()
for ele in lst:
lst_new.append(m.get(ele, ele))
l_new.append(lst_new)
输出:
[['G', 'G', 'F'], ['G', 'D'], ['D', 'E']]
或使用 1-liner:
[[m.get(ele, ele) for ele in lst] for lst in l]
[['G', 'G', 'F'], ['G', 'D'], ['D', 'E']]
【讨论】:
以上是关于根据字典映射表替换列表中的元素的主要内容,如果未能解决你的问题,请参考以下文章
如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中