Python使用defaultdict生成自定义对象的字典

2024-10-01 17:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了下面的类。包、网站和评论都是字符串,District是(字符串,列表)字典。在

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)自定义字典。在

^{pr2}$

我希望包是键,entry对象是值。我可以在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))

基本上收到相同的错误:

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)

Tags: inpyselfpackageinitwikilinewebsite
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:32

当您试图从defaultdict获取某些内容时,它将返回实例化它的^{}的实例,在您的示例中是没有方法append的{}。但这并不是你得到错误的原因。这是因为当返回一个实例时,它也会被计算,而且由于TableEntry没有它需要的参数,Python解释器会抱怨。但是即使在defaultdict调用中给了TableEntry参数,也可能会得到一个TypeError,因为defaultdict需要用可调用的(而不是类的实例)来调用。在

总之,不能用不可调用的unless you use subclassing实例化defaultdict。相反,你应该这样做:

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)

然后您可以做例如tableDict["package"]["website"]来获得您写入self.website的字符串。在

相关问题 更多 >

    热门问题