Python - Using defaultdict to make dictionary of custom objects
我创建了以下类。 包,网站和注释都是字符串,而distroDict是一个(字符串,列表)字典。
1 2 3 4 5 6 7 | class TableEntry(object): def __init__(self, package, website, distroDict, comments): self.package = package self.website = website self.distroDict = distroDict self.comments = comments |
我想使用defaultdict(TableEntry)来创建一个(string,TableEntry)自定义字典。
1 2 3 | tableDict = defaultdict(TableEntry) entry = TableEntry(package, website, distroDict, comments) tableDict[package].append(entry) |
我希望包是键,输入对象是值。 我可以使用条目对象中的值,但如果我尝试将其附加到tableDict,我会收到以下错误。
1 2 3 4 5 6 | Traceback (most recent call last): File"wiki.py", line 151, in <module> printMetaData(lines, f) File"wiki.py", line 73, in printMetaData tableDict[package].append(entry) TypeError: __init__() takes exactly 5 arguments (1 given) |
我也尝试过以下方法:
1 | tableDict[package].append(TableEntry(package, website, distroDict, comments)) |
并且基本上收到相同的错误:
1 2 3 4 5 6 | Traceback (most recent call last): File"wiki.py", line 150, in <module> printMetaData(lines, f) File"wiki.py", line 73, in printMetaData tableDict[package].append(TableEntry(package, website, distroDict, comments)) TypeError: __init__() takes exactly 5 arguments (1 given) |
当您尝试从defaultdict获取某些内容时,它会返回您实例化的
总之,除非使用子类,否则无法使用不可调用的方法实例化defaultdict。 相反,你应该做这样的事情:
1 2 3 4 5 6 7 8 9 10 | class TableEntry(object): def add(self, package, website, distroDict, comments): self.package = package self.website = website self.distroDict = distroDict self.comments = comments tableDict = defaultdict(TableEntry) entry = ("package","website","distroDict","comments") tableDict["package"].add(*entry) |
然后你可以做,例如