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

标签 python dictionary

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

相关文章:

ios - 如何在Swift中从JSON对象删除属性(key:values)

iphone - MKMapView 标注在装有 iOS 4.1 的 iPhone 4 上不显示

python - 如何访问字典中所有键的值?

python - 在python中显示2D数独板

java - 如何使用其他值对 Java 中的 Map<String, String> 中的日期进行排序

Python。如何在Python中从列表中删除零

python - 用 pybind11 包装一个 C++ 分配的实例

string - 将矩阵元素映射到字符串

python - 如何拆分嵌套列表元素的第一个元素?

python - ElementNotInteractableException : Element <> is not reachable by keyboard