jav*_*993 5 python dictionary defaultdict
我创建了以下课程。包,网站和注释都是字符串,而distroDict是(字符串,列表)字典。
class TableEntry(object):
def __init__(self, package, website, distroDict, comments):
self.package = package
self.website = website
self.distroDict = distroDict
self.comments = comments
Run Code Online (Sandbox Code Playgroud)
我想使用defaultdict(TableEntry)制作(字符串,TableEntry)自定义词典。
tableDict = defaultdict(TableEntry)
entry = TableEntry(package, website, distroDict, comments)
tableDict[package].append(entry)
Run Code Online (Sandbox Code Playgroud)
我希望包是键,输入对象是值。我可以在入口对象中使用值,但如果尝试将其附加到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)
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法:
tableDict[package].append(TableEntry(package, website, distroDict, comments))
Run Code Online (Sandbox Code Playgroud)
并基本上收到相同的错误:
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)
Run Code Online (Sandbox Code Playgroud)
当您尝试从defaultdict获取某些内容时,它会返回default_factory您实例化它的实例,在您的情况下,该实例TableEntry没有method append。但这实际上不是为什么您会得到此错误。发生这种情况的原因是,返回实例时也会对其进行评估,并且由于TableEntry没有所需的参数,因此Python解释器会抱怨。但是,即使TableEntry在defaultdict调用中被提供了参数,您也可能会得到a,TypeError因为defaultdict需要使用可调用对象(而不是类的实例)来调用它。
总而言之,除非使用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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以执行例如操作,tableDict["package"]["website"]以获取写入的字符串self.website。
| 归档时间: |
|
| 查看次数: |
3807 次 |
| 最近记录: |