Uma classe tem um construtor que recebe um parâmetro:
class C(object):
def __init__(self, v):
self.v = v
...
Em algum lugar do código, é útil para valores em um dicionário conhecer suas chaves.
Quero usar um defaultdict com a chave passada para os valores padrão recém-nascidos:
d = defaultdict(lambda : C(here_i_wish_the_key_to_be))
Alguma sugestão?
python
dictionary
defaultdict
Benjamin Nitlehoo
fonte
fonte
defaultdict
o__missing__()
método pode ser sobrescrito (como pode em qualquer subclasse da classe embutidadict
desde a versão 2.5).Não, não há.
A
defaultdict
implementação não pode ser configurada para passar em faltakey
para odefault_factory
out-of-the-box. Sua única opção é implementar sua própriadefaultdict
subclasse, conforme sugerido por @JochenRitzel, acima.Mas isso não é "inteligente" ou quase tão limpo quanto uma solução de biblioteca padrão seria (se existisse). Portanto, a resposta à sua pergunta sucinta sim / não é claramente "Não".
É uma pena que a biblioteca padrão não tenha uma ferramenta tão necessária.
fonte
Eu não acho que você precise
defaultdict
aqui. Por que não apenas usar odict.setdefault
método?Isso, é claro, criaria muitas instâncias de
C
. Caso seja um problema, acho que a abordagem mais simples servirá:Seria mais rápido do que o
defaultdict
ou qualquer outra alternativa, pelo que posso ver.ETA em relação à velocidade do
in
teste versus o uso da cláusula try-except:fonte
d[key]
para retornard[key] = C(key)
sekey not in d
. Mas a sua solução requer que ele vá e pré-configured[key]
com antecedência? Como ele saberia o quekey
ele precisava?Aqui está um exemplo prático de um dicionário que adiciona um valor automaticamente. A tarefa de demonstração para localizar arquivos duplicados em / usr / include. Observe que o PathDict do dicionário personalizado requer apenas quatro linhas:
fonte