【问题标题】:check two dictionaries that have similar keys but different values检查两个具有相似键但值不同的字典
【发布时间】:2013-05-07 15:13:23
【问题描述】:

我有两本字典。 dict1 和 dict2。 dict 2 的长度始终相同,但 dict1 的长度不同。两本词典如下:

dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"}

dict1 = {"name":"falak", "sex":"female"}

我想创建基于 dict1 和 dict2 的第三个字典。 dict3 将具有 dict2 的所有值。但是所有那些存在于 dict1 中的键都将被替换。这是生成的dict3

dict3 = {"name":"falak","sex":"female","age":"97","address":"blablabla"}

我可以使用多个 if 语句来实现,但希望有一种更智能的方法。请有人指导我。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    你试过了吗:

    dict3 = dict(dict2, **dict1)
    

    或者:

    dict3 = dict2.copy()
    dict3.update(dict1)
    

    【讨论】:

    • 感谢您的帮助。这就是我想要的。但只是意识到 dict1 是 ImmutableMultiDict。并具有以下格式的值 ImmutableMultiDict([('name', u'falak'), ('sex', u'female') ]) 如果我遇到这种情况该怎么办?
    • @yasra002 dict(dict2, **{k:dict1.getlist(k) for k in dict1}) 呢?
    • 现在生成的字典看起来像这样。 {"name":[u'falak'],"sex":[u'male'],"age":"97","address":"blablabla"} 仍然不是我想要的。我想要没有你的旗帜。我对python很陌生。如果您能解释为什么会这样,将不胜感激。
    • @yasra002 因为它们是 unicode (您很可能不需要担心这些)-而且每个键似乎没有多个值,因此您可以替换 @987654325 @ 只需 get
    • 非常感谢您的帮助 :)
    【解决方案2】:
    import copy
    dict3 = copy.copy(dict2)
    dict3.update(dict1)
    

    【讨论】:

      【解决方案3】:

      来自python documentation

      更新([其他])

      • 使用其他键/值对更新字典,覆盖现有键。
      • 无返回值。
      • update() 接受另一个字典对象或键/值对的可迭代对象(作为元组或长度为 2 的其他可迭代对象)。如果指定了关键字参数,则字典会使用这些键/值对更新:d.update(red=1, blue=2)。
      • 在 2.4 版中更改:允许参数是键/值对的可迭代对象并允许关键字参数。

      所以:

      dict1.update(dict2)
      

      【讨论】:

        【解决方案4】:

        首先,您从 d1 添加具有 d2 中不存在的键的项目。 d1 中的所有其他键都在 d2 中。

        然后,添加 d2 中的所有键,如果 d1 中没有此类键,则添加 d2 中的值,如果 d1 中存在键,则添加 d1 中的值。

        dict2 = {"name":"martin","sex":"male","age":"97","address":"blablabla"}
        dict1 = {"name":"falak", "sex":"female"}
        
        dic = dict()
        
        for key, val in dict1.items():
          if key not in dict2.keys():
            dic[key] = val
        
        for key, val in dict2.items():
          if key not in dict1.keys():
            dic[key] = val
          else:
            dic[key] = dict1[key]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-15
          • 2022-01-18
          • 1970-01-01
          • 2019-12-26
          相关资源
          最近更新 更多