我经常发现自己在字典中编写这种模式来累积有关某件事的计数。 在本例中,我正在收集数据中心应用程序的主机硬件信息,并且模式与我经常使用的模式相同。
今天,我想知道是否有更好的方法(更多的 Pythonic(来构建这种模式?
我确实环顾了一下 S.O. 最常见的结果是在列表中使用 append 来添加不存在的东西,但这并没有解决如何在字典中执行累加器的问题,其中传入的键/值可能已经存在,也可能不存在字典中。
hardware_types = []
for host in hosts:
hardware_type = hosts[host]['hardware_type']
if hardware_type in hardware_types:
hardware_types[hardware_type] += 1
else:
hardware_types[hardware_type] = 1
谢谢 鲍勃
我经常在这种情况下使用 defaultdict。在声明时,您可以指定默认值是什么,它将在您第一次引用它时生成。在这种情况下,您需要一个 0,并且可以使用 int 类型作为构造函数:
from collections import defaultdict
hardware_types = defaultdict(int)
for host in hosts:
hardware_type = hosts[host]['hardware_type'])
hardware_types[hardware_type] += 1
它可以嵌套,包括通过 lambda 的字典等。 它通过避免检查密钥是否存在来帮助保持代码更轻,但是要小心假设,以防密钥应该存在但由于错误而不存在,它将被创建并且不会引发异常。