我正在尝试检索已放入词典中的对象,但每次尝试检索时都会收到一个错误:
class CSVEntry:
lat = []
lon = []
count = 0
# Create dictionary for tracking inputs
dict = defaultdict(list)
# Lookup the zipcode (returns an integer value)
zipcode = ConvertLatLonToZip(row[latCol], row[lonCol])
# If the zipcode is already in the dictionary, update it with the new count
if zipcode in dict:
oldEntry = dict[zipcode]
oldEntry.lat.append(row[latCol])
oldEntry.lon.append(row[lonCol])
oldEntry.count = dict[zipcode].count + 1
# Otherwise, make a new entry
else:
entry = CSVEntry()
entry.lat.append(row[latCol])
entry.lon.append(row[lonCol])
entry.count = 1
# Hash on the zipcode
dict[zipcode].append(entry)
它在字典中插入条目没有问题,但一旦发现重复项,就会失败,并出现以下错误:
^{pr2}$我很抱歉,如果这是一个重复或可笑的简单问题。我是Python的初学者,在决定发布之前我搜索了很长时间。在
编辑:增加了dict的定义
{cd2>现在是。看起来你想改变
到
^{pr2}$这就是说,简单地创建一个新的
CSVEntry
对象并将其附加到dict[zipcode]
或者,可以创建包含CSVEntry
对象的dict
一个defaultdict
对象,这意味着您不必检查zipcode是否在dict中这可能是解决问题最简单的方法。另一方面,您希望避免将变量命名为
dict
,因为它会覆盖内置的dict
类型。在你给自己做了一个包含列表的defaultdict。当您调用
dict[zipcode].append(entry)
时,Python会创建一个新的列表,您可以在该列表中插入条目。然而,当你做oldEntry = dict[zipcode]
时,你会把这个列表当作一个CSVEntry来对待。在您应该使用普通dict插入条目,如下所示:
或将项目附加到条目:
^{pr2}$defaultdict
的重点是抽象出对现有项的搜索。如果对列表进行defaultdict,则不应在字典中查找条目,而只需在必要时追加新条目;当您请求不存在的键时,defaultdict将负责为您提供一个新列表以供使用。在相关问题 更多 >
编程相关推荐