重构:合并两个字典,但是忽略None值

时间:2018-10-25 15:33:00

标签: python python-3.x dictionary refactoring

我需要一些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 但仍保持良好可读性的代码段?

1 个答案:

答案 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}