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

时间:2017-02-23 16:55:18

标签: python string list dictionary replace

我有一个嵌套列表:

my_list = ['a','b','c','dog', ['pig','cat'], 'd']

和一个字典:

my_dict = {'dog':'c','pig':'a','cat':'d'}

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

new_list = ['a', 'b', 'c', 'c', ['a', 'd'], 'd']

我尝试过类似的事情:

new_list = []
for idx1, item1 in enumerate(my_list):
    for idx2, item2 in enumerate(item1):
        new_list[idx1][idx2] = my_dict[item2]

item2dict不存在时出错。有更好的方法吗?

3 个答案:

答案 0 :(得分:6)

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

 SELECT USERNAME,count(coms.C_KEY)        
    FROM USERS usrs
    join COMMENTS coms
    on coms.U_KEY = usrs.U_KEY
   WHERE coms.C_KEY >= 3
ORDER BY coms.C_KEY DESC;

输出:

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))

答案 1 :(得分:1)

你看,我试图替换成嵌套列表。试试这个函数,这将递归交换你的值:

def replace_vals(_list, my_dict):
    new_list = []
    for item in _list:
        if isinstance(item, list):
              new_list.append(replace_vals(item, my_dict))
        elif item in my_dict:
            new_list.append(my_dict.get(item))
        else:
            new_list.append(item)    
    return new_list

print replace_vals(my_list, my_dict)

答案 2 :(得分:0)

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


def replace(item):
    if item in my_dict:
        return my_dict[item]
    else:
        return item
new_list=[];
for item in my_list:
    if isinstance(item,list):
        temp_list=[]
        for subitem in item:
            temp_list.append(replace(subitem))
        new_list.append(temp_list)
    else:
        new_list.append(replace(item))
print new_list

如果my_list中的列表本身嵌套,则这段代码将无效。