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

我知道已经存在这个问题的变体,并且我已经完成了它们。具体来说,我遇到的问题是here和here。我已经尝试使用列出的所有解决方案,但它确实对我不起作用,因为在我的情况下,我必须遍历另一个字典,而且很多时候 dict 的 dict 中的键也将是相同的(在这种情况下值应该变成一个列表。让我用一个例子来说明:


可以说entity_sentiment_dictionary是我要附加到的字典 fromentity_sentiment_int_int_dict


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}}

当我更新时,结果应该是这样的:


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 循环进行更改。感谢您提供任何帮助,并且还建议使用任何其他方式来获得预期结果。


MMTTMM
浏览 126回答 2
2回答

跃然一笑

这是一个解决方案: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: Trueentity_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.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])输出 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python