我有两个具有相同密钥的dict
dict1 = {'version': 222,'name_app': 'foo1'}
dict2 = {'version': 222,'name_app': 'foo1','dir': 'c','path': 'cc'}
现在我想检查dict1是否与dict2具有相同的键和值我喜欢避免循环,并检查dict1中的每个键和值是否在dict2中有什么蟒蛇般优雅的方式可以做到这一点吗
UPDATE
dict1的两个键大多在dict 2中,如果只有1个匹配,则为false
你可以像这样做
set(dict1.items())-set(dict2.items())== set()
它将根据您的条件返回true或false
如果dictonaries有列表:
from operator import *
g = itemgetter(*dict1)
print(dict1.keys() <= dict2.keys() and g(dict1) == g(dict2))
我会使用operator.itemgetter
:
from operator import itemgetter
dict1 = {"version": 222, "name_app": "foo1"}
dict2 = {"version": 222, "name_app": "foo1", "dir": "c", "path": "cc"}
g = itemgetter(*dict1)
print(g(dict1) == g(dict2))
打印:
True
编辑:dict1的所有键必须匹配:
from operator import itemgetter
dict1 = {"version": 222, "name_app": "foo1"}
dict2 = {"version": 222, "name_app": "foo1", "dir": "c", "path": "cc"}
g = itemgetter(*dict1)
print(dict1.keys() <= dict2.keys() and g(dict1) == g(dict2))
打印:
True
编辑2:如果dict有一个列表值:
from operator import itemgetter
dict1 = {"version": 222, "name_app": ["a", "b", "c"]}
dict2 = {"version": 222, "name_app": ["a", "b", "c"], "dir": "c", "path": "cc"}
g = itemgetter(*dict1)
print(dict1.keys() <= dict2.keys() and g(dict1) == g(dict2))
打印:
True
您可以执行此
dict1 = {'version': 222,'name_app': 'foo1'}
dict2 = {'version': 222,'name_app': 'for','dir': 'c','path': 'cc'}
common=set(dict1.items())-set(dict2.items())
print(list(common)!=[])