扭曲地检查字典中的多个 kv
Check for multiple kv in a dictonary with a twist
我有一个字典搜索列表,我需要检查它是否存在于另一个源字典中。
source_dict = { 'a':'1', 'blue':'yes', 'c':'3' }
search_list = [ {'a':'1', 'b':'2'}, {'blue': 'yes'} ]
列表中的项目都需要检查,但是,我们需要对同一个字典中的所有项目进行 AND。或者在列表中的字典之间。
我将如何着手解决这个问题?
您可以使用 any
和 all
:
>>> # the `OR` (`any`) of the `AND`s (`all`s) for each dict
>>> any(all(k in source_dict and source_dict[k] == v for k, v in d.items()) for d in search_list)
True
>>> # the `AND`s (`all`s) for each dict
>>> [all(k in source_dict and source_dict[k] == v for k, v in d.items()) for d in search_list]
[False, True]
any(map(lambda x: all(map(lambda k: source_dict[k] == x[k] if k in source_dict else False, x.keys())), search_list))
我有一个字典搜索列表,我需要检查它是否存在于另一个源字典中。
source_dict = { 'a':'1', 'blue':'yes', 'c':'3' }
search_list = [ {'a':'1', 'b':'2'}, {'blue': 'yes'} ]
列表中的项目都需要检查,但是,我们需要对同一个字典中的所有项目进行 AND。或者在列表中的字典之间。
我将如何着手解决这个问题?
您可以使用 any
和 all
:
>>> # the `OR` (`any`) of the `AND`s (`all`s) for each dict
>>> any(all(k in source_dict and source_dict[k] == v for k, v in d.items()) for d in search_list)
True
>>> # the `AND`s (`all`s) for each dict
>>> [all(k in source_dict and source_dict[k] == v for k, v in d.items()) for d in search_list]
[False, True]
any(map(lambda x: all(map(lambda k: source_dict[k] == x[k] if k in source_dict else False, x.keys())), search_list))