【发布时间】:2021-01-26 09:14:49
【问题描述】:
我正在开发一个网站,它部分采用 json 字典,其中每个项目都有“coder”、“category”等键,并采用某些 url 参数以按名称过滤它类别或编码器的名称。如果用户不过滤,这些 URL 参数可以是 none,如果用户只过滤特定信息,则可以是部分参数。
但是,我想不出一个干净的方法来按这些值过滤字典。 我期望能够做的是传递“coder”和“category”的值,并创建一个新字典,其中包含与其中指定的内部值匹配的所有内容,并按原样返回整个字典,如果没有指定参数.
这是我现在拥有的一些代码:
def filter_packages(packages, developer=None, category=None):
newpackages = []
for package in packages:
if developer and category:
if package["coder"] == developer:
if package["category"] == category:
newpackages.append(package)
elif developer:
if package["coder"] == developer:
newpackages.append(package)
elif category:
if package["category"] == category:
newpackages.append(package)
else:
newpackages.append(package)
return newpackages
此代码不可行,因为它杂乱、冗长且重复。用户能够应用的过滤器越多,我必须添加的案例就越多。 我想知道如何使用更简洁、更具可扩展性的代码来实现这一点。
【问题讨论】:
-
是for循环中的返回吗?还是应该只是追加,然后在迭代所有包后返回?
-
@sim 啊这不是故意的,在澄清这个问题时忘记删除它。
-
我认为你应该使用规范设计模式,它是专门为处理这种情况而设计的。这样做的主要优点是,如果您决定添加更多过滤器,而不是重写所有内容,您只需为新的过滤器类型扩展类。此设计模式从 5 个可靠的设计原则中指定了 OCP 的使用。您可以在网络上找到许多资源来实现这一点。
标签: python json python-3.x dictionary