Python:如何将DictReader行添加为字典以列出更新

时间:2017-06-05 19:01:09

标签: python dictionary

我的代码基本上只是通过检查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

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)