在字典和字典列表之间进行日志操作
make log operations between a dictionary and a list of dictionaries
您好,我正在寻找答案:
假设我有这个。
a= {'OCC': 6, 'FFR': 90, 'DTY': 3139, 'UTY': 1861, 'VGY': 2175, 'DGG': 364,
'CCG': 37, 'OPTY': 80, 'SET': 666, 'WEK': 82, 'XAU': 56, 'ROD': 38, 'PLS': 206, 'DAFF': 2, 'C': 2}
b= [{'key': 'OCC', 'count': 3615, 'prob': 0},
{'key': 'FFR', 'count': 408, 'prob': 0},
{'key': 'DTY', 'count': 915, 'prob': 0},
{'key': 'UTY', 'count': 652, 'prob': 0},
{'key': 'VGY', 'count': 365, 'prob': 0},
{'key': 'UTY', 'count': 589, 'prob': 0},
{'key': 'DGG', 'count': 573, 'prob': 0},
{'key': 'DTY', 'count': 75, 'prob': 0},
{'key': 'UTY', 'count': 148, 'prob': 0},
{'key': 'UTY', 'count': 116, 'prob': 0},
{'key': 'CCG', 'count': 7503, 'prob': 0}]
我想知道我怎么可能得到这样的结果:如果 a 中的键存在于 b 中,则执行 log(b 的值) - log(a 的值)。然后可能将其保存在密钥 'prob' 中。
(对于这个例子,让我们考虑字典 a 的第一个元素:key OCC 出现在列表 b 的第一个字典中。我想知道如何在整个列表 b 中做到这一点,并更新里面字典中的每个概率键b)
所以我会得到这样的东西:
日志(3615)-日志(6)=6.401087665364811
所以列表 b 的第一个字典中的概率应该更新为:
{'key': 'OCC', 'count': 3615, 'prob':6.401087665364811 }
如果 a
和 b
是您对问题的输入:
from pprint import pprint
from math import log
for d in b:
if d["key"] in a:
d["prob"] = log(d["count"]) - log(a[d["key"]])
pprint(b)
更多关于它是如何工作的,首先它获取每个字典,然后对于每个字典,检查 d["key"]
(应该在 a 中的键)是否在 a 中。如果是这样,它会获取 d["count"]
这是该字典的计数,使用数学日志包计算日志,并计算 a[d["key"]]
的日志,这是 a[<key stored in b>]
的值。然后它减去两者并将其分配给 d["prob"]
打印:
[{'count': 3615, 'key': 'OCC', 'prob': 6.401087665364811},
{'count': 408, 'key': 'FFR', 'prob': 1.5114575040738965},
{'count': 915, 'key': 'DTY', 'prob': -1.232735491566432},
{'count': 652, 'key': 'UTY', 'prob': -1.0488246947155977},
{'count': 365, 'key': 'VGY', 'prob': -1.7848865899402933},
{'count': 589, 'key': 'UTY', 'prob': -1.1504430729906643},
{'count': 573, 'key': 'DGG', 'prob': 0.45373184907799935},
{'count': 75, 'key': 'DTY', 'prob': -3.7341714433056428},
{'count': 148, 'key': 'UTY', 'prob': -2.531656982878136},
{'count': 116, 'key': 'UTY', 'prob': -2.7752790655358863},
{'count': 7503, 'key': 'CCG', 'prob': 5.3121403069015045}]
您好,我正在寻找答案:
假设我有这个。
a= {'OCC': 6, 'FFR': 90, 'DTY': 3139, 'UTY': 1861, 'VGY': 2175, 'DGG': 364,
'CCG': 37, 'OPTY': 80, 'SET': 666, 'WEK': 82, 'XAU': 56, 'ROD': 38, 'PLS': 206, 'DAFF': 2, 'C': 2}
b= [{'key': 'OCC', 'count': 3615, 'prob': 0},
{'key': 'FFR', 'count': 408, 'prob': 0},
{'key': 'DTY', 'count': 915, 'prob': 0},
{'key': 'UTY', 'count': 652, 'prob': 0},
{'key': 'VGY', 'count': 365, 'prob': 0},
{'key': 'UTY', 'count': 589, 'prob': 0},
{'key': 'DGG', 'count': 573, 'prob': 0},
{'key': 'DTY', 'count': 75, 'prob': 0},
{'key': 'UTY', 'count': 148, 'prob': 0},
{'key': 'UTY', 'count': 116, 'prob': 0},
{'key': 'CCG', 'count': 7503, 'prob': 0}]
我想知道我怎么可能得到这样的结果:如果 a 中的键存在于 b 中,则执行 log(b 的值) - log(a 的值)。然后可能将其保存在密钥 'prob' 中。 (对于这个例子,让我们考虑字典 a 的第一个元素:key OCC 出现在列表 b 的第一个字典中。我想知道如何在整个列表 b 中做到这一点,并更新里面字典中的每个概率键b)
所以我会得到这样的东西: 日志(3615)-日志(6)=6.401087665364811 所以列表 b 的第一个字典中的概率应该更新为:
{'key': 'OCC', 'count': 3615, 'prob':6.401087665364811 }
如果 a
和 b
是您对问题的输入:
from pprint import pprint
from math import log
for d in b:
if d["key"] in a:
d["prob"] = log(d["count"]) - log(a[d["key"]])
pprint(b)
更多关于它是如何工作的,首先它获取每个字典,然后对于每个字典,检查 d["key"]
(应该在 a 中的键)是否在 a 中。如果是这样,它会获取 d["count"]
这是该字典的计数,使用数学日志包计算日志,并计算 a[d["key"]]
的日志,这是 a[<key stored in b>]
的值。然后它减去两者并将其分配给 d["prob"]
打印:
[{'count': 3615, 'key': 'OCC', 'prob': 6.401087665364811},
{'count': 408, 'key': 'FFR', 'prob': 1.5114575040738965},
{'count': 915, 'key': 'DTY', 'prob': -1.232735491566432},
{'count': 652, 'key': 'UTY', 'prob': -1.0488246947155977},
{'count': 365, 'key': 'VGY', 'prob': -1.7848865899402933},
{'count': 589, 'key': 'UTY', 'prob': -1.1504430729906643},
{'count': 573, 'key': 'DGG', 'prob': 0.45373184907799935},
{'count': 75, 'key': 'DTY', 'prob': -3.7341714433056428},
{'count': 148, 'key': 'UTY', 'prob': -2.531656982878136},
{'count': 116, 'key': 'UTY', 'prob': -2.7752790655358863},
{'count': 7503, 'key': 'CCG', 'prob': 5.3121403069015045}]