在字典和字典列表之间进行日志操作

问题描述

你好,我想知道这个:

假设我有这个。

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,{'key': 'DTY','count': 915,{'key': 'UTY','count': 652,{'key': 'VGY','count': 365,'count': 589,{'key': 'DGG','count': 573,'count': 75,'count': 148,'count': 116,{'key': 'CCG','count': 7503,'prob': 0}]

我想知道我怎么可能得到这样的东西:如果 a 中的键存在于 b 中,那么执行 log(value of b) - log(value of a)。然后可能将其保存在密钥“prob”中。 (对于这个例子,让我们考虑字典 a 的第一个元素:key OCC 存在于列表 b 的第一个字典中。我正在寻找如何在所有列表 b 中执行它并更新字典中的每个 prob 键b)

所以我会得到这样的东西: 日志(3615)-日志(6)=6.401087665364811 所以列表 b 的第一个字典中的 prob 应该更新为:

{'key': 'OCC','prob':6.401087665364811 }

解决方法

如果 ab 是您的问题输入:

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"] 是该 dict 的计数,使用 math log 包计算日志,并计算 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,'prob': -1.1504430729906643},{'count': 573,'key': 'DGG','prob': 0.45373184907799935},{'count': 75,'prob': -3.7341714433056428},{'count': 148,'prob': -2.531656982878136},{'count': 116,'prob': -2.7752790655358863},{'count': 7503,'key': 'CCG','prob': 5.3121403069015045}]