【问题标题】:Check if dictionary contain another dictionary [duplicate]检查字典是否包含另一个字典[重复]
【发布时间】:2021-09-26 22:11:11
【问题描述】:

我有两本词典:

dict1 = {"Name":"x", "Surname":"y", "Age":30}

dict2 = {"Name":"x", "Surname":"y"}

我想要这样的条件:

if dict2 in dict1:
    return True

如果我运行这段代码,它会返回:

TypeError: unhashable type: 'dict'

解决方案?

【问题讨论】:

  • in 比较键,并期望您要比较的值是一个有效类型作为键。您不能将 dict 作为密钥,因为它是不可散列的。
  • 我注意到了 :-)

标签: python loops dictionary


【解决方案1】:

如果您只想检查密钥是否已经存在,这应该对您有用:

if all(key in dict1 for key in dict2):
    return True

如果你想检查这些值是否也匹配,试试这个:

if all(kv in dict1.items() for kv in dict2.items()):
    return True

【讨论】:

  • 这并不检查values是否也匹配。根据 OP 发布的示例,这就是 OP 真正想要的。
  • @CaptainTrojan 在问题中并不明确。反正更新了。
  • 我把我的 -1 改成了 +1,但你真的相信吗?为什么他们会将names 指定为x 并将surnames 指定为y?你认为这是巧合吗?假设 OP 正是想要这个是不安全的?
【解决方案2】:

你可以这样做:

dict1 = {"Name": "Bob", "Surname": "Smith", "Age": 30}

dict2 = {"Name": "Bob", "Surname": "Smith"}

print(all(dict1[k] == v for k, v in dict2.items()))

【讨论】:

    【解决方案3】:

    您可以执行以下操作:

    all(item in dict1.items() for item in dict2.items())
    

    你将不得不迭代 dicts 元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 2013-03-04
      相关资源
      最近更新 更多