如何使用字典查找替换列表中的元素

Posted

技术标签:

【中文标题】如何使用字典查找替换列表中的元素【英文标题】:How to replace elements in a list using dictionary lookup 【发布时间】:2013-06-22 03:47:45 【问题描述】:

鉴于此列表

my_lst = ['LAC', 'HOU', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']

我想根据字典值改变它的0th1st值:

def translate(my_lst):
    subs = 
        "Houston": "HOU", 
        "L.A. Clippers": "LAC",

    

所以列表变成:

['L.A. Clippers', 'Houston', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']

【问题讨论】:

为什么你的字典没有翻转? subs的键值可以交换subs = "HOU": "Houston", "LAC": "L.A. Clippers", 这是故意的,我需要一个解决方案,所以更换 acc。 dict 值。 @IgnacioVazquez-Abrams 似乎每个人都喜欢反向词典 【参考方案1】:

这是 pandas 中的单行 ....

df['A'].replace(dict(zip(
        ['SERVICios', 'ECON?MICO', 'ECONOMICO', 'EN ESPECIE'],
        ['servicios', 'economico', 'economico', 'en especie'])
                       ),regex=True)

【讨论】:

【参考方案2】:

如果您想要更短的内容,您可以利用 pandas 中的 series 函数

import pandas as pd
A = ['A','B','A','C','D'] #list we want to replace with a dictionary lookup
B = 'A':1,'B':2,'C':3,'D':4 #dictionary lookup, dict values in B will be mapped to entries in A
C = (pd.Series(A)).map(B) #convert the list to a pandas series temporarily before mapping
D = list(C) # we transform the mapped values (a series object) back to a list
# entries in D = [1,2,1,3,4]

【讨论】:

【参考方案3】:

如果所有值都是唯一的,那么您应该首先反转 dict 以获得有效的解决方案:

>>> subs = 
...         "Houston": "HOU", 
...         "L.A. Clippers": "LAC",
... 
...     
>>> rev_subs =  v:k for k,v in subs.iteritems()
>>> [rev_subs.get(item,item)  for item in my_lst]
['L.A. Clippers', 'Houston', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']

如果您只是尝试更新选定的索引,请尝试:

indexes = [0, 1]
for ind in indexes:
    val =  my_lst[ind]
    my_lst[ind] = rev_subs.get(val, val)

【讨论】:

实际上我有另一个函数可以根据dict键替换元素,我只是想使用标志reverse,这就是为什么我正在寻找我在OP中描述的解决方案来完成这项工作。 然后就可以构造逆向字典了(然后自然使用):reverse_subs = v: k for k, v in subs.items()【参考方案4】:

反转 dict,然后将查找应用到列表的前 2 个元素:

subs = 
    "Houston": "HOU", 
    "L.A. Clippers": "LAC",



my_lst = ['LAC', 'HOU', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']
my_lst[:2] = map(dict(zip(subs.values(), subs)).get, my_lst[:2])
print my_lst

【讨论】:

【参考方案5】:

如果值是唯一的,那么你可以翻转字典:

subs = v:k for k, v in subs.iteritems()

然后您可以使用.get() 从字典中获取值,以及第二个参数以防键不在字典中:

print map(subs.get, my_lst, my_lst)

打印:

['L.A. Clippers', 'Houston', '03/03 06:11 PM', '2.13', '1.80', '03/03 03:42 PM']

【讨论】:

以上是关于如何使用字典查找替换列表中的元素的主要内容,如果未能解决你的问题,请参考以下文章

python列表,如何批量查找替换

python:遍历列表并用相应的字典值替换元素

如何根据另一个字典查找和替换一个字典中的值

如何使用 jinja2 检查字典中的列表元素?

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

如何从字典中的列表中删除元素[重复]