2014-07-29 4 views
6

Мне интересно, есть ли более умный способ создания дефолтного дефолта из коллекций. В качестве значения по умолчанию для параметра dict должно быть пустое число ndarray.Создание defaultdict с пустым массивом numpy

Мой лучший результат до сих пор:

import collections 
d = collections.defaultdict(lambda: numpy.ndarray(0)) 

Однако, я задаюсь вопросом, если есть возможность пропустить этот термин лямбда и создать Dict в более прямой путь. Как:

d = collections.defaultdict(numpy.ndarray(0)) # <- Nice and short - but not callable 
+2

Почему вы хотите использовать ndarray с defaultdict? Вам нужно будет каждый раз создавать новый массив, чтобы вставить элемент в существующий ключ, лучше использовать список, поддерживающий операцию добавления. –

ответ

11

Вы можете использовать functools.partial() вместо лямбда:

from collections import defaultdict 
from functools import partial 

defaultdict(partial(numpy.ndarray, 0)) 

Вам всегда нужно вызываемым для defaultdict() и numpy.ndarray()всегда потребности, по крайней мере один аргумент, так что вы не можете просто перейдите в numpy.ndarray здесь.

+0

Я новичок в Numpy. Правильно ли Ashwini, когда он говорит: «Каждый раз вам нужно будет создать новый массив, чтобы вставить элемент в существующий ключ. Лучший список использования, который поддерживает операцию добавления? – Phillip

+1

@Phillip да, они правильные. Численные массивы имеют фиксированный размер; см. [Как расширить массив на месте в Numpy?] (http://stackoverflow.com/q/13215525). –

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