Python dataclasses, correct way to default_factory a list of default dicts containing lists?

Viewed 3935

I'd like to accomplish an init of a list, containing default dicts, in turn containing lists.

What I have tried:

@dataclass
class MyClass:
    self.b: int
    
    cache: list = field(default_factory=list) 

    def __post_init__(self):
        self.cache = [defaultdict(list) for _ in range(self.b)]

I'd appreciate help. Thank you.

1 Answers

I basically just want to be able to go cache[i]['something'].append()

Something like the below

from dataclasses import dataclass,field
from collections import defaultdict

@dataclass
class MyClass:
    b: int
    cache: list = field(default_factory=list) 

    def __post_init__(self):
        self.cache = [defaultdict(list) for _ in range(self.b)]

mc: MyClass = MyClass(3)

mc.cache[1]['demo'].append('something')
print(mc)

output

MyClass(b=3, cache=[defaultdict(<class 'list'>, {}), defaultdict(<class 'list'>, {'demo': ['something']}), defaultdict(<class 'list'>, {})])
Related