You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问字典列表中的元素?CSV读取及对象查询问题求助

解决CSV字典筛选与Django模型查询问题

问题1:筛选特定的CSV行字典

你已经用csv.DictReader把每行转成了字典,直接通过遍历+条件判断就能筛选目标行,注意CSV读取的所有值默认都是字符串,必要时要转类型或清理空格:

  • 找POS值为1的字典
    先把可迭代的reader转成列表方便复用,再用列表推导式筛选:

    import csv
    
    with open('your_file.csv', 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        rows = list(reader)
        # 转int是因为CSV读出来的是字符串
        pos1_rows = [row for row in rows if int(row['POS']) == 1]
        # 只取第一个匹配项的话用next,找不到返回None
        first_pos1_row = next((row for row in rows if int(row['POS']) == 1), None)
    
  • 找所有Product为TV的字典
    建议先清理前后空格,避免因空格导致匹配失败,不区分大小写的话可以统一转小写/大写:

    tv_rows = [row for row in rows if row['Product'].strip().lower() == 'tv']
    

问题2:Product.objects.get()返回None的排查与解决

首先纠正一个点:get()方法不会返回None,找不到匹配对象时它会直接抛出Product.DoesNotExist异常。你说返回None,大概率是用了filter().first()或者自己捕获异常后返回了None。下面是常见原因和解决方法:

  1. CSV字段有多余空格/格式问题
    CSV里的产品名可能带前后空格(比如' TV '),即使__iexact也匹配不上。先对提取的值做清理:

    product_name = row['Product'].strip()
    try:
        product = Product.objects.get(name__iexact=product_name)
    except Product.DoesNotExist:
        print(f"找不到产品:{product_name}")
    
  2. 数据库中无匹配记录
    直接在Django Shell里验证:执行Product.objects.filter(name__iexact='TV'),看是否有结果。如果没有,就是数据库里确实没有对应数据,需要核对产品名。

  3. 模型字段名错误
    确认你的Product模型里存储产品名的字段是name吗?如果是product_name这类其他字段,要把查询条件改成product_name__iexact。

  4. 字符编码/全半角差异
    比如CSV里是全角的'TV',数据库里是半角'TV',看起来一样但实际不匹配。可以打印原始字符串的repr来排查:

    # 看CSV里的原始内容
    print(repr(row['Product']))
    # 在Django Shell里看数据库的内容
    for p in Product.objects.all():
        print(repr(p.name))
    

    发现差异后统一转成半角或处理编码。

  5. 误用查询方法
    如果是用Product.objects.filter(name__iexact=product).first(),找不到时会返回None,这时候可以换成get(),通过捕获异常来明确问题,而不是得到模糊的None。

内容的提问来源于stack exchange,提问作者sloth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:40:29