为了账号安全,请及时绑定邮箱和手机立即绑定

当键已经存在时更新字典内部的字典

当键已经存在时更新字典内部的字典

MMTTMM 2022-07-26 10:33:36
我知道已经存在这个问题的变体,并且我已经完成了它们。具体来说,我遇到的问题是here和here。我已经尝试使用列出的所有解决方案,但它确实对我不起作用,因为在我的情况下,我必须遍历另一个字典,而且很多时候 dict 的 dict 中的键也将是相同的(在这种情况下值应该变成一个列表。让我用一个例子来说明:可以说entity_sentiment_dictionary是我要附加到的字典 fromentity_sentiment_int_int_dictentity_sentiment_dictionary = {  'name': {'userid1': 0.0}, 'Aditya': {'userid1': 0.0}, 'Glen': {'5dad13fc54aeb500078637e0': -0.10000000149011612}, 'Kenta': {'5dad13fc54aeb500078637e0': 0.0}, 'Keita': {'5dd23a18c7949300087d8d88': 0.0}, 'Ganchan': {'5dd23a18c7949300087d8d88': 0.0}, 'Anna': {'5dd23a18c7949300087d8d88': 0.0}, 'Joe': {'5dd23a18c7949300087d8d88': 0.8999999761581421}}entity_sentiment_int_int_dict = {  'name': {'userid1': 0.1},                                  'Aditya': {'userid2': 0.3}}当我更新时,结果应该是这样的:entity_sentiment_dictionary = {  'name': {'userid1': [0.0,0.1]},     'Aditya': {'userid1': 0.0, 'userid2': 0.3},     'Glen': {'5dad13fc54aeb500078637e0': -0.10000000149011612},     'Kenta': {'5dad13fc54aeb500078637e0': 0.0},     'Keita': {'5dd23a18c7949300087d8d88': 0.0},     'Ganchan': {'5dd23a18c7949300087d8d88': 0.0},     'Anna': {'5dd23a18c7949300087d8d88': 0.0},     'Joe': {'5dd23a18c7949300087d8d88': 0.8999999761581421}}这是我在尝试了我可以在网上找到的所有方法后所达到的目标:for key in entity_sentiment_int_int_dict.keys():        if key in entity_sentiment_dictionary:            for k in entity_sentiment_dictionary.keys():                if key==k:                    entity_sentiment_dictionary[key][k] = dict(entity_sentiment_int_int_dict[key])        else:            entity_sentiment_dictionary[key] = entity_sentiment_int_int_dict[key]我觉得我快到了,需要对嵌套的 for 循环进行更改。感谢您提供任何帮助,并且还建议使用任何其他方式来获得预期结果。
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

这是一个解决方案:


for k, v in entity_sentiment_int_int_dict.items():

    if k in entity_sentiment_dictionary.keys():

        entry = entity_sentiment_dictionary[k]

        for update_key, update_val in v.items():

            if update_key in entry:

                if isinstance(entry[update_key], list):

                    entry[update_key].append(update_val)

                else:

                    entry[update_key] = [entry[update_key], update_val]

            else:

                entry[update_key] = update_val


# with 'out' as desired output dict from OP:

entity_sentiment_dictionary == out  # True

完整的代码重现:


entity_sentiment_dictionary = {  'name': {'userid1': 0.0},

 'Aditya': {'userid1': 0.0},

 'Glen': {'5dad13fc54aeb500078637e0': -0.10000000149011612},

 'Kenta': {'5dad13fc54aeb500078637e0': 0.0},

 'Keita': {'5dd23a18c7949300087d8d88': 0.0},

 'Ganchan': {'5dd23a18c7949300087d8d88': 0.0},

 'Anna': {'5dd23a18c7949300087d8d88': 0.0},

 'Joe': {'5dd23a18c7949300087d8d88': 0.8999999761581421}}


entity_sentiment_int_int_dict = {  'name': {'userid1': 0.1},

                                  'Aditya': {'userid2': 0.3}}


out = {'name': {'userid1': [0.0,0.1]},

     'Aditya': {'userid1': 0.0, 'userid2': 0.3},

     'Glen': {'5dad13fc54aeb500078637e0': -0.10000000149011612},

     'Kenta': {'5dad13fc54aeb500078637e0': 0.0},

     'Keita': {'5dd23a18c7949300087d8d88': 0.0},

     'Ganchan': {'5dd23a18c7949300087d8d88': 0.0},

     'Anna': {'5dd23a18c7949300087d8d88': 0.0},

     'Joe': {'5dd23a18c7949300087d8d88': 0.8999999761581421}}


for k, v in entity_sentiment_int_int_dict.items():

    if k in entity_sentiment_dictionary.keys():

        entry = entity_sentiment_dictionary[k]

        for update_key, update_val in v.items():

            if update_key in entry:

                if isinstance(entry[update_key], list):

                    entry[update_key].append(update_val)

                else:

                    entry[update_key] = [entry[update_key], update_val]

            else:

                entry[update_key] = update_val

断言测试和实际输出:


print(f"Result matches desired output: {entity_sentiment_dictionary == out}")

# Result matches desired output: True


entity_sentiment_dictionary


{'name': {'userid1': [0.0, 0.1]},

 'Aditya': {'userid1': 0.0, 'userid2': 0.3},

 'Glen': {'5dad13fc54aeb500078637e0': -0.10000000149011612},

 'Kenta': {'5dad13fc54aeb500078637e0': 0.0},

 'Keita': {'5dd23a18c7949300087d8d88': 0.0},

 'Ganchan': {'5dd23a18c7949300087d8d88': 0.0},

 'Anna': {'5dd23a18c7949300087d8d88': 0.0},

 'Joe': {'5dd23a18c7949300087d8d88': 0.8999999761581421}}


查看完整回答
反对 回复 2022-07-26
?
噜噜哒

TA贡献1784条经验 获得超7个赞

这可以满足您的要求。可以进一步优化。

for key in entity_sentiment_int_int_dict.keys():    if key in entity_sentiment_dictionary.keys():        if entity_sentiment_dictionary[key].keys() == entity_sentiment_int_int_dict[key].keys():
            temp = []
            temp.append(next(iter(entity_sentiment_dictionary[key].values())))
            temp.append(next(iter(entity_sentiment_int_int_dict[key].values())))
            entity_sentiment_dictionary[key][next(iter(entity_sentiment_dictionary[key].keys()))] = temp        else:
            entity_sentiment_dictionary[key].update(entity_sentiment_int_int_dict[key])
    else:
        entity_sentiment_dictionary.update(entity_sentiment_int_int_dict[key])

输出 

//img1.sycdn.imooc.com//62df52b000018de005240149.jpg

查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信