我的旧代码以以下形式存储设备_name.id及其分配的sACN universe:
prev = {
"312398": 1,
"232312": 2,
"312353": 3
}
现在我将它存储为一个带有附加属性的嵌套dict
device_name.model
如下所示:
current = {
"312341": {
"model": "Some-Model",
"universe": 1
},
"532342": {
"model": "Some-other-model",
"universe": 2
}
}
我的旧代码有一个函数
def get_free_universe():
return next(
i
for i in range(1, 128)
if i not in conf.values()
)
这样称呼:
device_count = sdk.get_device_count() #setup Corsair devices config
for device_index in range(device_count):
device_name = sdk.get_device_info(device_index)
device_type = device_name.type
if device_name.id not in conf:
if conf.keys == " ":
print("config empty, universer = 1")
universe = 1
else:
universe = get_free_universe()
conf.update({device_name.id: {"model": device_name.model, "universe": universe}})
print(f"conf= {conf}")
else:
universe = conf[device_name.id]
现在当然if i not in conf.values()
部分不再工作了。我需要查看每个dict的键universe
。我怎样才能做到?目前,由于带有device_name.id
的dicts的值本身没有一个值,因此我无法获得下一个数字,它只会给每个设备_name.id相同的宇宙(1)
您只需查找0到127范围内的第一个值,该值尚未用作主dict的dict值的任何“universe”键的值:
请注意,如果128以下没有可用值,这将抛出一个
StopIteration
,就像您自己的代码一样一个选项是在新映射中创建所有宇宙值的
set
。例如,使用上面示例中的映射:然后,您可以使用新变量
universes
而不是前面所做的conf.values()
。当然,如果您生成并分配了一个新的宇宙,您还需要记住将其添加到此哈希集,如下所示:然后需要对
get_free_universe
函数稍加修改:相关问题 更多 >
编程相关推荐