Хорошо, я отвечаю на свой вопрос, потому что я внедряю гибрид двух, если кто-то читает это позже. Это код, который, кажется, работает для меня:
def main():
# Dictionary to check
example_dict = {'a': True, 'b' : "b", 'c' : "c", 'd' : "d", 'e' : False, 'f' : {'fa' : "", 'fb' : "b", 'fc' : "fc", "fd" : 0, "fe" : 0, "ff" : 0, "fg" : []}}
# Conditions to find within the dictionary
conditions = [[('a', True), ('b', "b"), ('c', "c")], [('a', False), ('b', "bb"), ('c', "c")]]
# If the conditions aren't met, print false, else true
if not check_conditions(example_dict, conditions):
print("FALSE: a: {} b: {} c: {}".format(example_dict['a'], example_dict['b'], example_dict['c']))
else:
print("TRUE: a: {} b: {} c: {}".format(example_dict['a'], example_dict['b'], example_dict['c']))
# broken up into a function because my program
# is broken up over multiple files
def check_conditions(my_dict, condition_list):
return any(all(my_dict[k] == v for k, v in c) for c in condition_list)
Вывод со словарем как есть:
TRUE: a: True b: b c: c
Вывод, когда «b» заменяется на «bb» (в первом случае не выполняется условие «b», во втором - условие «a»):
FALSE: a: True b: bb c: c
Код использует кортежи над словарями. Я предполагаю, почему причина этого работает, а другой - нет, потому что я думаю, что код проверяет, соответствует ли весь словарь, тогда как кортежи изолируют указанные c ключи.
Спасибо Вы, все, за вашу помощь.