根据自定义词典在列表中映射值-Python

时间:2020-07-30 10:11:06

标签: python python-3.x

我有一个数字列表:

a = [4,4,4,4,4,4,4,4,4,........................,4,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4]

我想根据自定义词典对值进行转换,例如:

cust_dict ={4:'four',1:'one',2:'two',3:'three'}

要获得以下内容:

a= [four,four,four,four,four.....,four, three,two,....]

我唯一完成的代码是使用for循环:

for i in range(len(a)):
   a[i] = cust_dict[a[i]]

是否有更有效的方法(在纯python中),从而避免了for循环? 对于35,000件商品,我用这段代码花了大约4毫秒。

4 个答案:

答案 0 :(得分:3)

感谢映射,我正是在寻找类似的东西。 就速度而言(在我的列表中(35,000个条目)):

  1. 列表理解(@Arvin Kushwaha):a = [cust_dict[i] for i in a]-> 3毫秒
  2. Lambda映射(@Arvin Kushwaha):a = list(map(lambda x: cust_dict[x], a))-> 5.54ms
  3. 字典获取映射(@Olvin Roght):a=list(map(cust_dict.get, a)-> 2毫秒

PS:熊猫映射花费了9毫秒(将pd.series转换回列表) 谢谢大家!

答案 1 :(得分:1)

看看这个:

a= [4,4,4,4,4,4,4,4,4,4,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4]

cust_dict ={4:'four',1:'one',2:'two',3:'three'}

output = list(map(lambda x: cust_dict[x], a))

print(output)
# ['four', 'four', 'four', 'four', 'four', 'four', 'four', 'four', 'four', 'four', 'three', 'two', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'three', 'four']

答案 2 :(得分:1)

对于35K项,我将使用NumPy数组,或者在这种情况下使用Pandas系列(这显然忽略了您问题中提到的“纯Python”):

ffmpeg

但是您可能不希望根据进一步的需求和用法将系列转换回列表。

答案 3 :(得分:0)

a [:] = map(lambda x:cust_dict [x],a)