2015-12-24 3 views
-3

Как преобразовать каждый элемент списка в соответствии со словарем? Например: У меня есть список:Python: Как преобразовать каждый элемент списка в соответствии со словарем?

l = [0,1,2,3,2,3,1,2,0] 

и у меня есть словарь:

m = {0:10, 1:11, 2:12, 3:13} 

Мне нужно получить список:

[10, 11, 12, 13, 12, 13, 11, 12, 10] 
+3

Вы проводили какое-то время, ища существующий вопрос по этому вопросу? – TigerhawkT3

+0

Да. И в отличие от большинства ответов вашей ссылки, у меня есть дублированные ключи. Кроме того, там нет теста скорости. – Sklavit

+0

1. Я сказал «вопрос». 2. Какую разницу делают дублирующие ключи? 3. Ваши результаты могли быть ответом на существующий вопрос или даже комментарий к ответу. – TigerhawkT3

ответ

-1

Есть несколько способов сделать это:

In[1]: l = [0,1,2,3,2,3,1,2,0] 
In[2]: m = {0:10, 1:11, 2:12, 3:13} 
In[3]: %timeit [m[_] for _ in l] # list comprehension 
1000000 loops, best of 3: 762 ns per loop 
In[4]: %timeit map(lambda _: m[_], l) # using 'map' 
1000000 loops, best of 3: 1.66 µs per loop 
In[5]: %timeit list(m[_] for _ in l) # a generator expression passed to a list constructor. 
1000000 loops, best of 3: 1.65 µs per loop 
In[6]: %timeit map(m.__getitem__, l) 
The slowest run took 4.01 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 853 ns per loop 
In[7]: %timeit map(m.get, l) 
1000000 loops, best of 3: 908 ns per loop 
In[33]: from operator import itemgetter 
In[34]: %timeit list(itemgetter(*l)(m)) 
The slowest run took 9.26 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 739 ns per loop 

Таким образом, понимание списка - это самый быстрый способ сделать это.

Смежные вопросы