来自for循环的词典列表,如果有则hasattr

时间:2018-07-03 09:50:05

标签: python list dictionary

以下代码开始:

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)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)的{​​{1}}中进行迭代,因此我仍然可以给entry_obj正确的{{ 1}}。

1 个答案:

答案 0 :(得分:1)

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

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