我的代码基本上只是通过检查DictReader的每一行(一个dicts列表)并将重复项放在RejectedEvents的dicts列表中并返回结果,这是一个重复数据删除的dicts字典。我还需要为RejectedEvents的每一行添加一个原因,因为我稍后会因其他原因拒绝。代码是非常自我解释的问题,但不是解决方案;问题是标记为#PROBLEM的行,当我取出update语句时问题就消失了;使用update语句,分配了null,如果没有分配行,则更新会搞乱它。
def GetScrubbedEventData(MetricID, EventsRaw, RejectEvents):
start = time.time()
pass_count = 0
fail_count = 0
result = {}
for row in csv.DictReader(EventsRaw, delimiter=","):
try:
#check duplicate
result[row['AssetID']]
Reason = {"RejectedFor": "Duplicate AssetID in same file."}
RejectEvents.append(dict(row).update(Reason)) #PROBLEM
fail_count += 1
except KeyError:
row['EventStart'] = scrub.Date(row['EventStart'])
row['EventEnd'] = scrub.Date(row['EventEnd'])
result[row['AssetID']] = row
pass_count += 1
答案 0 :(得分:1)
更新行,然后附加更新的行,而不是.update
None
的返回值:
for row in csv.DictReader(EventsRaw):
...
row.update(Reason)
RejectEvents.append(row)
或者您可以直接在字典row
上设置新内容,而无需创建单值字典Reason
:
for row in csv.DictReader(EventsRaw):
...
row["RejectedFor"] = "Duplicate AssetID in same file."
RejectEvents.append(row)