python - 如何检查字典是否是另一个复杂字典的子集
问题描述
我需要验证另一个字典是否是另一个字典的子集,有一个技巧是在这些字典中有一个字典数组。
超集:
dct_1 = {
'x': 'x',
'y': [
{
't': '123',
'a': 'a'
}
]
}
子集:
dict_2 = {
'x': 'x',
'y': [
{
't': '123'
}
]
}
从递归函数检查字典是另一个字典答案的子集我收到此错误:
TypeError: unhashable type: 'dict'
我的代码:
def is_subset(superset, subset):
for key, value in subset.items():
if key not in superset:
return False
if isinstance(value, dict):
if not is_subset(superset[key], value):
return False
elif isinstance(value, str):
if value not in superset[key]:
return False
elif isinstance(value, list):
if not set(value) <= set(superset[key]):
return False
elif isinstance(value, set):
if not value <= superset[key]:
return False
else:
if not value == superset[key]:
return False
return True
class Test(unittest.TestCase):
def setUp(self):
self.dct = {
'x': 'x',
'y': [
{
't': '123',
'a': 'a'
}
]
}
def check_is_subset_true(self, superset, subset):
return self.assertEqual(is_subset(superset, subset), True)
def test_is_true(self):
self.check_is_subset_true(self.dct, {
'x': 'x',
'y': [
{
't': '123'
}
]
})
解决方案
这是一种方法,对您的用例来说足够了吗?
def is_subset(superset, subset):
if type(superset) != type(subset):
return False
if isinstance(subset, dict):
for key, value in subset.items():
try:
if not is_subset(superset[key], value):
return False
except KeyError:
return False
elif isinstance(subset, list):
for sub_e, super_e in zip(subset, superset):
if not is_subset(super_e, sub_e):
return False
else:
if superset != subset:
return False
return True
is_subset(dict_1, dict_2)
# True
推荐阅读
- python - 这个语句真的初始化了python中的变量类型吗?
- r - 如何对变量中日期范围内的每一行求和
- python - 非常低的回归分数和超低的分类分数
- excel - 将工作表复制到新工作簿并保存
- python - 使用 Python 和 Ray 读取大型 XML 文件
- python - 从预定义集中为 scipy.optimize 选择变量
- javascript - Centrifuge-js 使用用户脚本读取公共频道
- c++ - 从 MATLAB 代码和 MEX 文件和 dll 文件生成 C/C++ 代码
- r - R pivot_longer():tidyr 宽到长操作反向枢轴摘要到单个值
- javascript - 如何在发票中获取单个产品的多个 sku - jquery