我有一个数字列表:
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毫秒。
答案 0 :(得分:3)
感谢映射,我正是在寻找类似的东西。 就速度而言(在我的列表中(35,000个条目)):
a = [cust_dict[i] for i in a]
-> 3毫秒a = list(map(lambda x: cust_dict[x], a))
-> 5.54ms 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)