我创建了以下类。包,网站和评论都是字符串,distroDict是一个(字符串,列表)字典。Python - 使用defaultdict制作自定义对象字典
class TableEntry(object):
def __init__(self, package, website, distroDict, comments):
self.package = package
self.website = website
self.distroDict = distroDict
self.comments = comments
我想使用defaultdict(TableEntry)来制作一个(字符串,TableEntry)自定义字典。
tableDict = defaultdict(TableEntry)
entry = TableEntry(package, website, distroDict, comments)
tableDict[package].append(entry)
我想要包是关键和入口对象是价值。我可以使用入口对象内的值,但是如果我尝试将它附加到tableDict,我会收到以下错误。
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)
我也曾尝试以下操作:
tableDict[package].append(TableEntry(package, website, distroDict, comments))
和接收实质上相同的错误:当您尝试从defaultdict得到的东西,它返回的一个实例
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(列表)'你'附加'TableEntry's?默认的dict需要一个零参数函数来创建它的默认值,所以你实际上不能执行'defaultdict(TableEntry)'。 – AChampion
@AChampion wouldnt'defaultdict(list)'给我一个字典{string,[list]}?而我正在寻找与{字符串,TableEntry}字典。我需要将一个字符串映射到一个对象,而不是可以容纳多条信息和一个字符串,列表字典是不够的。如果我不能执行'defaultdict(TableEntry)'我该怎么做到这一点? – javakid1993
'defaultdist(list)'会给你一个{string:[]}字典,但是当你附加一个'TableEntry'时,你需要一个集合,例如。 {字符串:[TableEntry,TableEntry,...]}的字典。然而,如果你只是想要一个'{string:TableEntry}'的字典'为什么你需要一个'defaultdict',不会'tableDict = {}; tableDict [package] = TableEntry(...)'不起作用? – AChampion