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

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

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

慕神8447489 2023-09-19 17:33:04
我合并了两个字典,但我希望如果字典中的键已经存在,则键的值不会更改。现在,在我的代码中,键的值发生了变化。我用了这个代码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 aadd_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}
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超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}



查看完整回答
反对 回复 2023-09-19
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

您可以使用 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}
查看完整回答
反对 回复 2023-09-19
  • 2 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

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