Python:如何在更新时将DictReader行作为字典添加到列表中
我的代码基本上只是检查DictReader的每一行(dicts列表),并将重复项放入dicts的RejectedEvents列表中,然后返回结果,这是一个重复数据消除的dicts。我还需要为每一行被拒绝的事件添加一个原因,因为我以后也会因为其他原因而拒绝。这段代码和问题本身一样,都是不言自明的,但不是解决方案;问题是标记为#PROBLEM的行,当我取出update语句时,问题消失了;使用update语句时,会分配null,如果没有null,则会分配行,因此更新会把它搞砸Python:如何在更新时将DictReader行作为字典添加到列表中,python,dictionary,Python,Dictionary,我的代码基本上只是检查DictReader的每一行(dicts列表),并将重复项放入dicts的RejectedEvents列表中,然后返回结果,这是一个重复数据消除的dicts。我还需要为每一行被拒绝的事件添加一个原因,因为我以后也会因为其他原因而拒绝。这段代码和问题本身一样,都是不言自明的,但不是解决方案;问题是标记为#PROBLEM的行,当我取出update语句时,问题消失了;使用update语句时,会分配null,如果没有null,则会分配行,因此更新会把它搞砸 def GetScrub
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)
或者,您可以直接在dict行
上设置新的dict,而无需创建单值dict原因
:
for row in csv.DictReader(EventsRaw):
...
row["RejectedFor"] = "Duplicate AssetID in same file."
RejectEvents.append(row)
哇,谢谢。。。我可以发誓我试过了,但认为失败了,因为我是在更新DictRead中的一行,而不是DictRead。。。测试之后,当我使用dict(row.update)(原因)时,第一个解决方案失败了。。。。但是去掉dict()它就工作了。。。谢谢。
dict
调用不起作用,因为它更新了一个新的未引用的dict,而不是行
。