繁体   English   中英

在Python中找到两个字典之间的不匹配(键和值)

[英]Find mismatch (Keys and values) between two dicts in python

查找两个字典之间的不匹配(键和值)

superset = {"a":1, "b": 2, "c": 3, "d":4}
subset = {"a":1, "b": 2, "c": 3, "d":4}
print(all(item in superset.items() for item in subset.items()))
# Expected output: True and desired output True


superset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
subset = {"a":1, "b": 2, "c": 3, "d":5}
print(all(item in superset.items() for item in subset.items()))
# Expected output: False and desired output False

在测试用例下,由于我仅检查两个字典之间的不匹配键和值,因此多余的键和值将在超集或子集字典中被忽略。 在下面的情况下,子集中包含“ e”的是5的键是对应的值,相同的键或值在超集中不存在,因此我们可以忽略它,因为它不是不匹配的。

superset = {"a":1, "b": 2, "c": 3, "d":4}
subset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
print(all(item in superset.items() for item in subset.items()))
# Expected output: True and desired output False

如果要忽略不匹配的键,只需检查两个字典中都存在的键:

superset = {"a":1, "b": 2, "c": 3, "d":4, "f":8}
subset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
print(
    all(
        superset[key] == subset[key] 
        for key in set(superset.keys()) & set(subset.keys())
    )
)

将打印:

True


如果要检查每个字典是否包含彼此不匹配的值,则应按以下方式修改代码:

superset = {"a":1, "b": 2, "c": 3, "d":4, "f": 10, "g": 5}
subset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
print(
    all(
        superset[key] == subset[key] 
        for key in set(superset.keys()) & set(subset.keys())
    ) and
    all(
        superset[key] not in subset.values()
        for key in set(superset.keys()) - set(subset.keys())
    ) and
    all(
        subset[key] not in superset.values()
        for key in set(subset.keys()) - set(superset.keys())
    )
)

将打印:

False

尝试这个:

superset = {"a":1, "b": 2, "c": 3, "d":4}
subset = {"a":1, "b": 2, "c": 3, "d":4}
print([*superset.items()] == [*subset.items()])

superset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
subset = {"a":1, "b": 2, "c": 3, "d":5}
print([*superset.items()] == [*subset.items()])

superset = {"a":1, "b": 2, "c": 3, "d":4}
subset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
print([*superset.items()] == [*subset.items()])

输出: 在此处输入图片说明

这是第二个示例,其中每个字典具有相同的长度且具有相同的键,但是其中一个键具有与之相关的不同值,因此您知道它适用于键和值:

superset = {"a":1, "b": 2, "c": 3, "d":4, "e": 5}
subset = {"a":1, "b": 2, "c": 3, "d":5, "e":5}
print([*superset.items()],[*subset.items())
print([*superset.items()] == [*subset.items()])

输出: 在此处输入图片说明

您可以只循环一次,而不是像接受的答案一样循环几次。 只需忽略不在超集内的键,并且由于我们正在对子集进行迭代,它将自动忽略超集内不在子集中的所有键。

print(all(subset[key] == superset[key] for key in subset if key in superset))

输出:

True
False
True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM