如果您不知道密钥的数量和密钥的名称,如何将不等于1的概率转换为总和为1的概率?例如:
a = {'g' = 0.1, 'b' = 0.05, 'u' = 0.15, 'i' = 0.2}
Run Code Online (Sandbox Code Playgroud)
至:
a = {'g' = 0.2, 'b' = 0.1, 'u' = 0.3, 'i' = 0.4}
Run Code Online (Sandbox Code Playgroud)
你打算做什么叫做规范化:你sum用这个总和来计算和除以所有元素:
total_inv = 1.0/sum(a.values())
for key,val in a.items():
a[key] = val*total_inv
Run Code Online (Sandbox Code Playgroud)
甚至更短(如@ Jean-FrançoisFabre所说)使用dict理解:
total_inv = 1.0/sum(a.values())
a = {k:v*total_inv for k,v in a.items()}
Run Code Online (Sandbox Code Playgroud)
但是这将构造一个新的字典,因此不会更新对旧字典的引用.
在我们计算的代码中,1.0/sum(..)因为除法通常比乘法更昂贵,因此可以获得一些效率.