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

2024-05-04 16:28:11 发布

您现在位置: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}

Tags: omnibusuntukdandilawsayadiperintahkansekolah
2条回答

在将值添加到a之前,可以执行循环并检查b中的每个键

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添加第三个参数。然后在循环中,检查键是否在此列表中,如果是,则使用来自b的值而不是a的值

这导致(为了清晰起见,我添加了一个NumPy样式的docstring)

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}

您可以使用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}

相关问题 更多 >