从以列表形式存储值的字典开始,例如:
ID_TypeDict = {2: [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], 3: [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0], 4: [1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]}
我的目标是对列表值求和,并将该值作为int或float赋值给dict键。首先,我做了以下操作:
TypeSum = dict(zip(ID_TypeDict.keys(), [[sum(item)] for item in ID_TypeDict.values()]))
返回带有单个浮点值的列表:
{2: [1.0], 3: [1.0], 4: [2.0]}
如何将字典值赋给列表中的键?我试图分配值来代替列表对象(下面的代码片段),但这不是正确的方法,因为它不会改变任何东西:
for val in TypeSum.values():
for item in val:
val = [0]
实现这一目标的有效且最佳的实践方法是什么?它是否应该在生成TypeSum字典的同一行代码中完成(对列表值求和)?还是事后处理?提前谢谢。
只需使用字典推导式,就可以为每个键分配调用列表函数的聚合值。
>>> {k:sum(v) for k,v in ID_TypeDict.items()}
{2: 1.0, 3: 1.0, 4: 2.0}
您正在将sum
包装到列表中。如果您更喜欢使用zip
的函数式方法或PyGuy回答的字典理解,则可以使用以下命令:
type_sum = dict(zip(ID_TypeDict, map(sum, ID_TypeDict.values())))