我的代码基本上只是检查 DictReader (字典列表)的每一行,并将重复项放入字典的 RejectedEvents 列表中并返回结果,这是一个经过重复数据删除的字典字典。我还需要向 RejectedEvents 的每一行添加一个原因,因为稍后我也会因其他原因拒绝。该代码与问题一样非常不言自明,但不是解决方案;问题出在标记为#PROBLEM的那一行,当我取出更新语句时问题就消失了;使用 update 语句时,将分配 null,而如果不使用它,则会分配 row,因此更新会将其搞乱。
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
最佳答案
更新行,然后追加更新的行,而不是 .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)
关于Python:如何将 DictReader 行添加为字典以通过更新列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44375902/