我創建了以下類。包,網站和評論都是字符串,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