如何访问字典列表中的元素?CSV读取及对象查询问题求助
问题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。下面是常见原因和解决方法:
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}")数据库中无匹配记录
直接在Django Shell里验证:执行Product.objects.filter(name__iexact='TV'),看是否有结果。如果没有,就是数据库里确实没有对应数据,需要核对产品名。模型字段名错误
确认你的Product模型里存储产品名的字段是name吗?如果是product_name这类其他字段,要把查询条件改成product_name__iexact。字符编码/全半角差异
比如CSV里是全角的'TV',数据库里是半角'TV',看起来一样但实际不匹配。可以打印原始字符串的repr来排查:# 看CSV里的原始内容 print(repr(row['Product'])) # 在Django Shell里看数据库的内容 for p in Product.objects.all(): print(repr(p.name))发现差异后统一转成半角或处理编码。
误用查询方法
如果是用Product.objects.filter(name__iexact=product).first(),找不到时会返回None,这时候可以换成get(),通过捕获异常来明确问题,而不是得到模糊的None。
内容的提问来源于stack exchange,提问作者sloth

