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

问题描述 投票:0回答:2

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

我通过嵌套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}]

python django
2个回答
1
投票

如果你正在使用postgres,你可以使用distinct属性,然后使用值来获得你想要的设置,

你的代码相当于:

feature.settings.distinct('name', 'active').values('name', 'active')

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()
})
© www.soinside.com 2019 - 2024. All rights reserved.