我需要一些Python重构建议。
我有一个dict对象(new_monitors
)列表,可以为空。但是,当有新的监视器时,我想向这些监视器添加一堆字段。
对于每个监视器,我想附加not None
字典中的所有DogDump.HIDE_FIELDS
字段:
if new_monitors:
for monitor in new_monitors:
for key, value in DogDump.HIDE_FIELDS.items():
if value:
monitor[key] = value
注意:下面的代码片段效果很好,但是包含了所有“无”字段。我不想要无字段!
if new_monitors:
for monitor in new_monitors:
monitor.update(DogDump.HIDE_FIELDS)
如何重构看起来更像是 pythonic 但仍保持良好可读性的代码段?
答案 0 :(得分:1)
在将相关键/值对添加到DogDump.HIDE_FIELDS
字典之前,不确定哪种方法最真正的“ pythonic”方式来处理您需要过滤monitor
字典。一种方法是通过dict理解来执行“过滤”。
此外,我认为您可以在循环之前“过滤” DogDump.HIDE_FIELDS
字典,而不必在每次循环迭代时都重复此操作(除非在您执行其他操作时会使DogDump.HIDE_FIELDS
发生突变正在迭代)。
带有dict理解(“ dump
指您的DogDump.HIDE_FIELDS
dict”的“过滤”示例):
monitor = {'key': 'value'}
dump = {'a': 1, 'b': None}
dump_filtered = {k:v for (k,v) in dump.items() if v}
monitor.update(dump_filtered)
print(monitor)
# OUTPUT
# {'key': 'value', 'a': 1}