我怎样才能从这个深奥的“for”循环中创建一个列表理解?

2024-04-18 18:01:16 发布

您现在位置:Python中文网/ 问答频道 /正文

for role in self.collections[server.id][user.id]:
    for requested_set in self.roles[server.id]['sets']:
        if role in self.roles[server.id]['sets'][requested_set]['roles']:
            if requested_set not in requested_sets:
                requested_sets[requested_set] = []
            requested_sets[requested_set].append(role)

我试着分步做。你知道吗

第1行可以写成[x for x in self.collections[server.id][user.id]]。你知道吗

第2行可以写成[x for x in self.roles[server.id]['sets']]。你知道吗

第3行是我困惑的地方,因为它包含了第1行。你知道吗

我开始尝试:[x for x in (x for x in self.collections[server.id][user.id]) if x in self.roles[server.id]['sets'][requested_set]['roles']]

然而,我发现我需要合并一个新变量来表示不存在的requested_set变量。有没有办法把这些都放在一行?你知道吗


Tags: inselfidforifserversetsnot
1条回答
网友
1楼 · 发布于 2024-04-18 18:01:16

把所有这些代码放在一行是非常不明智的。虽然我个人喜欢列表理解,但有些人觉得它们很复杂。如果这段代码有可能在以后被编辑,最好不要为了维护而写在一行上。代码的真正成本是维护。而且,以我目前的知识,不可能在声明之前获得所请求的变量。代码太复杂了,不能放在一行上。你知道吗

但是,我不能告诉你如何编写代码。由于请求的set变量,不可能将所有内容放在一行中,但可以放在两行中:

for requested_set in self.roles[server.id]['sets']:
    requested_sets[requested_set] = [role for role in self.collections[server.id][user.id] if role in self.roles[server.id]['sets'][requested_set]['roles']]

相关问题 更多 >