嵌套的for循环对象返回唯一的键值对dict

时间:2019-03-24 19:22:57

标签: python django

也许标题令人困惑,但这是我的问题。

我遍历了带有嵌套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}]

2 个答案:

答案 0 :(得分:1)

如果您使用的是Postgres,则可以将distinct和fields属性一起使用,然后使用值来获得所需的设置,

您的代码将等效于:

select id, somevalue,
(select sum(increment) from increments i1 where i1.id <= i2.id)
from increments i2

答案 1 :(得分:0)

如果这就是您的意思,您可以使用字典理解。

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()
})