Сначала я думаю, что @ ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 ответов может быть самым быстрым ответом, и если вам не нравится пытаться отлавливать ошибки, вы можете сделать один из моих примеров:
list1=[]
list2=[]
d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5}
arr = " a b c 1125"
for e in arr.split(" "):
if e in d.keys():
list1.append(d[e])
else:
list2.append(e)
(Вы можете сделать два списка понимания, если вы готовы пожертвовать немного большей скоростью ради меньшего количества строк кода ...)
d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5}
arr = " a B C 1125"
list1 = [d[e] for e in arr.split() if e in d]
list2 = [e for e in arr.split() if e not in d]
Но теперь я провел тест с timeit.timeit
и, к своему удивлению, обнаружил, что на самом деле это был не самый быстрый способ.
d = {'a': 1, 'B':2, 'C': 3, 'D':4, 'E': 5}
arr = " a b c 1125"
# Functions
# ...
if __name__ == "__main__":
import timeit
print(timeit.timeit("a()", setup="from __main__ import a"))
print(timeit.timeit("b()", setup="from __main__ import b"))
print(timeit.timeit("c()", setup="from __main__ import c"))
print(timeit.timeit("D()", setup="from __main__ import D")) # D instaed of d because that is the OP dictionary
Где a()
было моей первой функцией, b()
моей второй, c()
@ ᴡʜᴀᴄᴋᴀᴍᴀᴅᴏᴏᴅʟᴇ3000 ответов и D()
было @ Майк Робинси отвечает . Выход был:
2.4083618169348338
2.548082368010459
3.629124371952302
1.7721276028098547
Итак, чем быстрее Майк, тем я и, наконец, Вжик. Но вы решаете выбрать свой стиль кодирования: try-catch, loop и comp понять, или наборы и &
.