首页 > 解决方案 > 带有 if else hasattr 的 for 循环中的字典列表

问题描述

以下代码开始:

products = [{
  "id": x.id,
  "fabric": x.fabric.name,
  "fabricimg": x.fabric.fabric_cover.url,
  } for x in entry_obj.all()]

cart_data = {
  "products": products,
  "total": cart_obj.total
}

return JsonResponse(cart_data)

x(objects)这适用于使用in 中的字典创建我的列表产品entry_obj.all()。但是现在我有一些x(objects)没有的情况x.fabric.name,而是必须使用填充符,例如简单的字符串,如"noname".

如何在现有的 for 循环中使用 if 语句来捕获名称不存在的情况,并将键结构设置为我的字符串值?

我想过使用:

if hasattr(entry_obj,"name") > "fabric": x.fabric.name
else > "fabric": "noname"

但是我不确定将它放在 for 循环中的哪个位置以及如何遍历x(objects)inentry_obj以便我仍然可以给出Json正确的cart_data.

标签: pythonlistdictionary

解决方案


getattr与第三个默认参数一起使用:

products = [{'id': x.id, 'fabric': getattr(x.fabric, 'name', 'noname'),
             'fabricimg': x.fabric.fabric_cover.url} for x in entry_obj.all()]

推荐阅读