23

鉴于此列表

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

我想根据字典值改变它的0th和值:1st

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

5 回答 5

30

如果所有值都是唯一的,那么您应该首先反转 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)
于 2013-06-25T11:13:10.713 回答
9

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

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']
于 2013-06-25T11:18:44.557 回答
5

如果你想要更短的东西,你可以利用这个series功能pandas

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]
于 2020-02-03T11:12:30.860 回答
2

反转字典,然后只需将查找应用于列表的前 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
于 2013-06-25T11:25:50.807 回答
0

这是熊猫中的一行....

df['A'].replace(dict(zip(
        ['SERVICIOS', 'ECON?MICO', 'ECONOMICO', 'EN ESPECIE'],
        ['servicios', 'economico', 'economico', 'en especie'])
                       ),regex=True)
于 2020-03-21T16:51:45.310 回答