如果键已经存在,如何在python中合并两个字典,键的值不改变?

我合并了两个字典,但我希望如果字典中的键已经存在,则键的值不会更改。


现在,在我的代码中,键的值发生了变化。


我用了这个代码


a={'saya': 2,'menolak': 2,'omnibus': 3,'law': 3,'dan': 1,'tetap': 1,'di': 1,'sekolah': 1,'diperintahkan': 1,'untuk': 1,'tidak': 1,'layak': 1}


b={'omnibus': 0,'law': 0,'meningkatkan': 0,'kesejahteraan': 0,'saya': 0,'setuju': 0,'diterapkan': 0}


def add_dict(a,b):

    a.update(b)

    return a


add_dict(a,b)

结果:


{'saya': 0,

 'menolak': 2,

 'omnibus': 0,

 'law': 0,

 'dan': 1,

 'tetap': 1,

 'di': 1,

 'sekolah': 1,

 'diperintahkan': 1,

 'untuk': 1,

 'tidak': 1,

 'layak': 1,

 'meningkatkan': 0,

 'kesejahteraan': 0,

 'setuju': 0,

 'diterapkan': 0}

我想要这样的结果:


  {'saya': 2,

     'menolak': 2,

     'omnibus': 3,

     'law': 3,

     'dan': 1,

     'tetap': 1,

     'di': 1,

     'sekolah': 1,

     'diperintahkan': 1,

     'untuk': 1,

     'tidak': 1,

     'layak': 1,

     'meningkatkan': 0,

     'kesejahteraan': 0,

     'setuju': 0,

     'diterapkan': 0}


慕神8447489
浏览 98回答 2
2回答

慕斯王

您可以执行循环并在b将值添加到 之前检查每个键a。def add_dict(a,b):    for key in b:        if key not in a:            a[key] = b[key]    return a编辑:如果您想保留某些值,b而不是即使a键已经存在,a您也可以添加第三个参数add_dict和键列表。然后在循环中,检查键是否在此列表中,并使用值 fromb而不是aif it is。结果是(为了清楚起见,我添加了 NumPy 风格的文档字符串)def add_dict(a,b, force_add=None):    """    Add key/value pairs from `b` into `a`. If a key is in `a` and in `b` its    value is not added to `a`, unless it is in force_add`.    Note: this modifies dictionary `a`    Parameters    ----------    a : dict        The first dictionary    b : dict        The second dictionary    force_add : list, optional        A list of keys in `b` whole values will be added to `a` even if `a`        already has the key    Returns    -------    dict        The first dictionary after it was modified.    """    if force_add is None:        force_add = []    for key in b:        if key not in a or key in force_add:            a[key] = b[key]    return a现在如果你这样做add_dict(b, a, force_add=["saya"])你会得到{'omnibus': 0, 'law': 0, 'meningkatkan': 0, 'kesejahteraan': 0, 'saya': 2, 'setuju': 0, 'diterapkan': 0, 'menolak': 2, 'dan': 1, 'tetap': 1, 'di': 1, 'sekolah': 1, 'diperintahkan': 1, 'untuk': 1, 'tidak': 1, 'layak': 1}

慕的地8271018

您可以使用 setdefault ,它仅在密钥不存在时更新:for i in b:     a.setdefault(i, b[i])print(a) {'saya': 2, 'menolak': 2, 'omnibus': 3, 'law': 3, 'dan': 1, 'tetap': 1, 'di': 1, 'sekolah': 1, 'diperintahkan': 1, 'untuk': 1, 'tidak': 1, 'layak': 1, 'meningkatkan': 0, 'kesejahteraan': 0, 'setuju': 0, 'diterapkan': 0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python