根据两个现有字典创建新字典

时间:2019-07-08 09:33:26

标签: arrays python-3.x dictionary

我有两个字典:

d={'doc_1': {'hope': 1, 'court': 2}, 'doc_2': {'hope': 1, 'court': 1}, 'doc_3': {'hope': 1, 'mention': 1}}

count={'doc_1': 6, 'doc_2': 5, 'doc_3': 12}

所有我想基于两个字典的相同键将字典d的嵌套字典的值除以字典count的值。 预期输出:-

new={{'doc_1': {'hope': 0.16666666, 'court': 0.3333333}, 'doc_2': {'hope': 0.2, 'court': 0.2}, 'doc_3': {'hope': 0.0833333, 'mention': 0.0833333}}。 我到目前为止所做的:

new={}
for k,v in d.items():
    for p,q in count.items():
        for w,r in v.items():
            if k==p:
                ratio=r/q
                new[k][w]=ratio

那给了我一个错误!

2 个答案:

答案 0 :(得分:2)

您可以使用dict理解:

from pprint import pprint

d={'doc_1': {'hope': 1, 'court': 2}, 'doc_2': {'hope': 1, 'court': 1}, 'doc_3': {'hope': 1, 'mention': 1}}
count={'doc_1': 6, 'doc_2': 5, 'doc_3': 12}

new_d = {k:{kk:vv/count[k] for kk, vv in v.items()} for k, v in d.items()}

pprint(new_d)

打印:

{'doc_1': {'court': 0.3333333333333333, 'hope': 0.16666666666666666},
 'doc_2': {'court': 0.2, 'hope': 0.2},
 'doc_3': {'hope': 0.08333333333333333, 'mention': 0.08333333333333333}}

答案 1 :(得分:1)

关于您的代码,由于在import io import base64 ... app.layout = html.Div(children=[ ..., html.Img(id='example') # img element ]) @app.callback( dash.dependencies.Output('example', 'src'), # src attribute [dash.dependencies.Input('n_points', 'value')] ) def update_figure(n_points): #create some matplotlib graph x = np.random.rand(n_points) y = np.random.rand(n_points) buf = io.BytesIO() # in-memory files plt.savefig(buf, format = "png") # save to the above file object data = base64.b64encode(buf.getbuffer()).decode("utf8") # encode to html elements plt.close() return "data:image/png;base64,{}".format(data) 不存在的情况下试图设置new[k][w],因此会产生错误。要解决此问题,您应该将new[k]初始化为一个空字典,然后填写它:

new[k]

输出

new={}
for k,v in d.items():
    new[k] = {}
    for p,q in count.items():
        for w,r in v.items():
            if k==p:
                ratio=r/q
                new[k][w]=ratio