gpt4 book ai didi

python - 减少 elif block 的数量

转载 作者:太空狗 更新时间:2023-10-30 01:12:02 24 4
gpt4 key购买 nike

我正在尝试根据以下 queryparams 进行过滤。

如何减少代码行数:

if fridge == 'true' and toilet == 'true' and side_window == 'true':
queryset = queryset.filter(toilet=True, fridge=True, sun_side_window=True)
elif fridge == 'true' and toilet == 'true':
queryset = queryset.filter(toilet=True, fridge=True)
elif fridge == 'true' and side_window == 'true':
queryset = queryset.filter(sun_side_window=side_window.capitalize(), fridge=fridge.capitalize())
elif toilet == 'true' and side_window == 'true':
queryset = queryset.filter(sun_side_window=side_window.capitalize(), toilet=toilet.capitalize())
elif fridge == 'true':
queryset = queryset.filter(fridge=fridge.capitalize())
elif toilet == 'true':
queryset = queryset.filter(toilet=toilet.capitalize())
elif side_window == 'true':
queryset = queryset.filter(sun_side_window=True)

最佳答案

我假设 'true'.capitalize() 是指 bool 值 True,而不是字符串 'True'

首先,将'true' 转换为True。然后,构建一个字典,其中包含要传递给 queryset.filter 的关键字参数。我在一个字典理解中执行这两个步骤:

vars = {'fridge': fridge, 'toilet': toilet, 'side_window': side_window}
kwargs = {kw: True for kw in vars if vars[kw] == 'true'}

如果你不熟悉理解,这等同于:

kwargs = {}
for kw in vars:
if vars[kw] == 'true':
kwargs[vars] = True

然后解压这个字典,并将它传递给queryset.filter:

queryset = queryset.filter(**kwargs)

解压字典相当于将其键/值对作为关键字参数传递给函数。

f(a=1, b=2)
# is equivalent to
kw = {'a': 1, 'b': 2}
f(**kw)

附带说明一下,我不知道 queryset,但它看起来像一个模块。如果是这样,我不建议将 queryset.filter 的结果重新分配给 queryset...

关于python - 减少 elif block 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45236846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com