当密钥已存在时,更新字典内的字典

2024-09-27 07:31:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个问题已经出现了很多变化,我已经讨论过了。具体来说,我所问的问题是herehere。我已尝试使用列出的所有解决方案,但对我来说确实不起作用,因为在我的情况下,我必须遍历其他字典,而且很多时候dict of dict中的键也将是相同的(在这种情况下,该值应成为一个列表。让我用一个示例说明:

假设entity_sentiment_dictionary是我想从entity_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]

结果是:

{'name': {'usedid1': 0.0,'name': {'userid1': 0.1}},
 'Aditya': {'userid1': 0.0, 'Aditya': {'userid2': 0.5} },
 '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循环进行更改。我们非常感谢您的帮助,并建议您使用任何其他方法来获得预期的结果


Tags: keynamedictionarydictintentityjoesentiment
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: 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}}

这正是你所需要的。 可以进一步优化

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])

输出 enter image description here

相关问题 更多 >

    热门问题