根据字典映射表替换列表中的元素

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']]

【讨论】:

以上是关于根据字典映射表替换列表中的元素的主要内容,如果未能解决你的问题,请参考以下文章

数组和广义表(列表)

如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中

如何根据字典替换熊猫系列中的字符串组,并将值作为列表?

Pandas:根据另一列的键在现有列上映射字典值以替换 NaN

根据列表中的元素对列表作为值的字典进行排序

如何根据有序列表替换pandas dataframe列中的元素?