用Python中的dict替换嵌套列表中的值?

use*_*200 1 python string dictionary replace list

我有一个嵌套列表:

my_list = ['a','b','c','dog', ['pig','cat'], 'd']
Run Code Online (Sandbox Code Playgroud)

和一个字典:

my_dict = {'dog':'c','pig':'a','cat':'d'}
Run Code Online (Sandbox Code Playgroud)

我想使用dict,这样我得到一个列表:

new_list = ['a', 'b', 'c', 'c', ['a', 'd'], 'd']
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西:

new_list = []
for idx1, item1 in enumerate(my_list):
    for idx2, item2 in enumerate(item1):
        new_list[idx1][idx2] = my_dict[item2]
Run Code Online (Sandbox Code Playgroud)

但是当我item2不存在时会收到错误dict.有一个更好的方法吗?

nie*_*mmi 6

您可以编写一个简单的递归函数,使用列表推导来生成结果.如果列表中的项目是列表,则递归,否则使用dict.get默认参数转换项目:

my_list = ['a','b','c','dog', ['pig','cat'], 'd']
my_dict = {'dog':'c','pig':'a','cat':'d'}

def convert(l, d):
    return [convert(x, d) if isinstance(x, list) else d.get(x, x) for x in l]

print(convert(my_list, my_dict))
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'b', 'c', 'c', ['a', 'd'], 'd']
Run Code Online (Sandbox Code Playgroud)