Python如何用字典中的值替换一个列表中的值?

时间:2017-07-20 04:31:09

标签: python list dictionary replace

示例:

我的列表是['tree','world','tre','worl']

我的字典是{'tre':'good','worl':nice}

我的剧本:

def replace(list, dictionary):
    for i in list:
        for k in dictionary:
            list = list.replace(k, dictionary[k])
    return list
print replace(input_file,curaw_dict)

但每次收到结果都是这样的:

goode
niced
good
nice

如何让它更准确 使它像

tree
world
good
nice

非常感谢

6 个答案:

答案 0 :(得分:0)

for k in dictionary:不是迭代字典中项目的正确方法。相反,您应该使用enumerate迭代列表中的项目并在字典中查找它们:

def replace(lst, dictionary):
    for k,v in enumerate(lst):
        if v in dictionary:
            lst[k] = dictionary[v]
    return lst

对于列表中的每个项目,k是值的索引,v是值本身。然后检查该值是否在字典中,如果是,则将列表中的值替换为字典中的值。

您也不应该将变量命名为list,因为这是Python中的保留字。

您也可以使用列表理解:

def replace(lst, dictionary):
    return [item if not item in dictionary else dictionary[item] for item in lst]

答案 1 :(得分:0)

Apple Grade C Laptop MacBook MC516LL/A-C
Intel Core 2 Duo P8600 (2.40 GHz)
2 GB Memory
250 GB HDD
13.3" Display
Mac OS X

您不需要迭代字典。替换会执行部分替换,但def replace(list, dictionary): for idx, val in enumerate(list): if i in k: list[idx] = dictionary[list[idx]] return list print replace(input_file,curaw_dict) 将检查字典中是否存在密钥。

答案 2 :(得分:0)

'key' in dictionary是检查dict中是否存在密钥的方法:

def replace(list, dictionary):
    new_list = []

    for i in list:
        if i in dictionary:
            new_list.append(dictionary[i])
        else:
          new_list.append(i)

    return new_list

答案 3 :(得分:0)

input_file = ['tree', 'world', 'tre', 'worl']
curaw_dict = {'tre':'good','worl':'nice'}

def replace(list, dictionary):
    return [curaw_dict.get(item, item) for item in list]
print replace(input_file,curaw_dict)

答案 4 :(得分:0)

让我们改为列表理解。

replaced_list = [x if x not in my_dict else my_dict[x] for x in my_list]

我想如果你想要一个你可以做的功能:

replace = lambda my_dict, my_list: [x if x not in my_dict else my_dict[x] for x in my_list]

def replace(my_list, my_dict):
    return [x if x not in my_dict else my_dict[x] for x in my_list]

答案 5 :(得分:0)

>>> li=['tree', 'world', 'tre', 'worl']
>>> di={'tre':'good','worl':'nice'}
>>> print('\n'.join(di.get(e,e) for e in li))
tree
world
good
nice