Для больших наборов данных вы можете получить некоторую скорость, используя np.fromiter
непосредственно на итераторах ключей и значений вместо того, чтобы сначала создавать списки.
Создать тестовый набор
>>> d = dict(zip(np.random.randint(1, 10, 1_000_000).cumsum(), np.arange(1_000_000.)))
>>> out = np.zeros(10_000_000)
Определить fromiter
method
>>> def use_iter():
... k, v = (np.fromiter(w, dtype=t, count=len(d)) for w, t in [(d.keys(), int), (d.values(), float)])
... out[k] = v
... return out
и list
метод для справки
>>> def use_list():
... out[list(d.keys())] = list(d.values())
... return out
и время их
>>> timeit(use_iter, number=100)
4.2583943260106025
>>> timeit(use_list, number=100)
17.10310926999955
Также проверьте правильность
>>> np.all(use_list() == use_iter())
True