也许标题令人困惑,但这是我的问题。
我通过嵌套for循环遍历django模型对象,如下所示。最后我想拥有具有唯一键值对的字典。
下面的代码有效,但我觉得它不是很有效。
settings = []
for feature in features:
for setting in feature.settings.all():
settings.append({"name": setting.name, "active": setting.active})
return [dict(t) for t in {tuple(setting.items()) for setting in settings}]
所以在返回之前我有这样的事情:[{'name': 'x', 'active': False}, {'name': 'y', 'active': True}, {'name': 'x', 'active': False}]
但当我返回时,我删除列表中的重复项并返回下面。 [{'name': 'x', 'active': False}, {'name': 'y', 'active': True}]
如果你正在使用postgres,你可以使用distinct属性,然后使用值来获得你想要的设置,
你的代码相当于:
feature.settings.distinct('name', 'active').values('name', 'active')
如果这是你的意思,你可以使用字典理解。
print({setting.name : setting.active for feature in features for setting in feature.settings.all()})
如果线条太长,你可以使用这样的东西。
print({
setting.name : setting.active
for feature in features
for setting in feature.settings.all()
})