python - dict.get 返回空而不是默认值

标签 python dictionary

我得到了一个 CSV 文件,其中包含行 idnamefirstnamecompany

我正在使用 csv.DictReader 遍历 CSV,并希望将一些默认值插入到 namefirstname 中,如果它们是空

dict.get() 应该可以解决这个问题 - 但它仅在 namefirstname never 时有效包含任何数据。一旦它们至少包含一次数据,返回的默认值将被忽略并且没有返回

测试.csv

"id","name","firstname","company"
"1","doe","john","jdoe inc"
"2","doe","jane","jdoe inc"
"3",,,"company inc"

导入_csv.py

import csv

with open("test.csv") as csv_file:
    reader = csv.DictReader(csv_file)

    for row in reader:
        firstname = row.get("firstname", "Company")
        name = row.get("name", row["company"])
        company = row["company"]

        print(f"Firstname:  {firstname}")
        print(f"Name:       {name}")
        print(f"Company:    {company}\n")

上述测试脚本的输出是

Firstname:  john
Name:       doe
Company:    jdoe inc

Firstname:  jane
Name:       doe
Company:    jdoe inc

Firstname:
Name:
Company:    company inc

我想要的输出是

Firstname:  john
Name:       doe
Company:    jdoe inc

Firstname:  jane
Name:       doe
Company:    jdoe inc

Firstname:  Company       # <- default value of dict.get()
Name:       company inc   # <- default value of dict.get()
Company:    company inc

最佳答案

dict.get() 仅在未设置键 时返回默认值。但是 DictReader() 正在设置键,值为空字符串。那是因为该列中有一个空字符串。

事实上,DictReader() 保证每个字段名都有一个键集(这里的字段名取自这里的第一行);如果一列完全缺失,则该值设置为 None

您可以使用 or 轻松说明这一点:

firstname = row["firstname"] or "Company"
name = row["name"] or row["company"]

如果键始终存在,则使用 dict.get() 毫无意义。但是,如果 row["firstname"] 设置为空字符串 None,则该值为 considered false ,因此 Python 将生成另一个操作数给

关于python - dict.get 返回空而不是默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54884676/

相关文章:

python - 不对 Pandas 列的所有行应用相同的函数?

python - 无法在 QObject 上调用 findChild(QObject, 'child' )。无返回值

python - Python dict 文字会按照写入的顺序进行评估吗?

c++ - operator[] 和 insert() 函数在 C++ 映射中的行为方式不应该相同吗?

python - 当在Python字典中找到键时更新值

python - 检测数字列表中的峰值并记录它们的位置

c# - 从 IEqualityComparer<> 派生外部类优于覆盖 GetHashCode 和 Equals 的优势

python - 查找相距很远的最大大小的字符串集

python - 如何提高 Pycharm 文档获取的性能

python - Jupyter 上的 TensorFlow : Can't restore variables