如何使用字典查找替换列表中的元素
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']
我想根据字典值改变它的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']
【问题讨论】:
为什么你的字典没有翻转?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']
【讨论】:
以上是关于如何使用字典查找替换列表中的元素的主要内容,如果未能解决你的问题,请参考以下文章