以1字典为基础合并Python中的字典

这个问题在这里已经有了答案:

  • 如何在单个表达式中合并两个字典? 48个答案

  • “Pythonicness”是一个难以评估的措施,但这是我的承诺:

    def merge_dicts(base_dict, other_dict):
        """ Merge two dicts
    
        Ensure that the base_dict remains as is and overwrite info from other_dict
        """
        if other_dict is None:
            return base_dict
        t = type(base_dict)
        if type(other_dict) != t:
            raise TypeError("Mismatching types: {} and {}."
                            .format(t, type(other_dict)))
        if not issubclass(t, dict):
            return other_dict
        return {k: merge_dicts(v, other_dict.get(k)) for k, v in base_dict.items()}
    

    例:

    merge_dicts({"a":2, "b":{"b1": 5, "b2": 7}}, {"b": {"b1": 9}})
    >>> {'a': 2, 'b': {'b1': 9, 'b2': 7}}
    

    如果你使用python 3.5或更高版本,你可以简单地做:

    merged_dict = {**base_dict, **other_dict}
    

    如果您使用任何以前的版本,您可以使用update方法执行此操作:

    merged_dict = {}
    merged_dict.update(base_dict)
    merged_dict.update(other_dict)
    

    有关它的更多信息,你可以检查Python的合并词典的习惯用法


    您可以使用dict.update方法和一个生成器表达式:

    base_dict.update((k, v) for k, v in other_dict.items() if k in base_dict)
    

    说明

    base_dict.update(other_dict)将覆盖值base_dict与那些在other_dict 。 如果一个键存在于other_dict但不在base_dict ,它将被添加到base_dict ,这不是你想要的。 因此,您需要测试other_dict中的每个键是否在base_dict

    dict.update可以将可迭代作为第一个参数。 如果后者包含2元组(k, v) ,则base_dict[k]将被设置为v

    help(dict.update)摘要help(dict.update)

    buildins.dict实例的update(...)方法

    如果E存在并且缺少.keys()方法,那么:对于E中的k,v:D [k] = v

    因此,传递一个生成器表达式很方便。 如果您不熟悉生成器表达式,则括号内的内容大致相当于以下内容:

    l = []
    for k, v in other.dict_items():
        if k in base_dict:
            l.append((k, v))
    

    然后l传递给update ,如base_dict.update(l)

    链接地址: http://www.djcxy.com/p/17571.html

    上一篇: Merge a dict in Python using 1 dict as base

    下一篇: Cannot merge two dictionaries in Python