Python 对照条件集检查字典列表并返回匹配键

Python 对照条件集检查字典列表并返回匹配键,python,dictionary,Python,Dictionary,我正在尝试在字典中使用“略读”或简化方法,它将从给定的一组条件中返回一组结果 然而,我目前的方法更多的是一种加法,它将简单地列出满足任何一个条件的任何项目 #仅列出“menuA/a100+menuB/b100”或“menuA/a100+menuB/b200”的me项目 #然而,有时我可能会有不止一个菜单`菜单'` #条件={'menuA':['a100']}应仅返回'Error2' 条件={'menuA':['a100'],'menuB':['b100','b200']} my_项目=[ {'c

我正在尝试在字典中使用“略读”或简化方法,它将从给定的一组条件中返回一组结果

然而,我目前的方法更多的是一种加法,它将简单地列出满足任何一个条件的任何项目

#仅列出“menuA/a100+menuB/b100”或“menuA/a100+menuB/b200”的me项目
#然而,有时我可能会有不止一个菜单`菜单'`
#条件={'menuA':['a100']}应仅返回'Error2'
条件={'menuA':['a100'],'menuB':['b100','b200']}
my_项目=[
{'correct':{'menuA':['a100'],'menuB':['b200']},
{'1':{'menuA':['a200'],'menuB':['b200']},
{'2':{'menuA':['a100']},
{'3':{'menuB':['b100']}
]
结果=[]
对于my_项目中的m:
对于mk,mv,单位为m.项目()
对于c,在以下条件下:
如果mv.keys()中有c:
如果条件[c]中的i为i,如果条件[c]中的i为mv[c]]:
结果追加(mk)
#我使用了'set',因为它两次返回'correct'。。。即便如此,它还是把所有的东西都还给了我。
打印(设置(结果))#设置([‘正确’、‘错误1’、‘错误2’、‘错误3’]))
#希望结果返回给我`正确`

尝试遵循您的逻辑:

result = []
for item in my_items:
    k, v = list(item.items())[0]
    if all(any(x in v.get(kc, []) for x in vc) for kc, vc in conditions.items()):
        result.append(k)

>>> print(set(result))
{'correct'}
更新:

如果您希望丢弃
菜单
多于
条件
的项目,这里有一个简单的解决方案:

for item in my_items:
    k, v = list(item.items())[0]
    has_same_keys = set(v) == set(conditions)
    at_least_one_value = all(
        any(x in v.get(kc, [])for x in vc) 
        for kc, vc in conditions.items())
    if has_same_keys and at_least_one_value:
        result.append(k)

尝试遵循您的逻辑:

result = []
for item in my_items:
    k, v = list(item.items())[0]
    if all(any(x in v.get(kc, []) for x in vc) for kc, vc in conditions.items()):
        result.append(k)

>>> print(set(result))
{'correct'}
更新:

如果您希望丢弃
菜单
多于
条件
的项目,这里有一个简单的解决方案:

for item in my_items:
    k, v = list(item.items())[0]
    has_same_keys = set(v) == set(conditions)
    at_least_one_value = all(
        any(x in v.get(kc, [])for x in vc) 
        for kc, vc in conditions.items())
    if has_same_keys and at_least_one_value:
        result.append(k)

什么是
选中的
?@LanteDellarovere它应该是
条件
。。。我已经更新了我的帖子。很抱歉,
检查了什么
。。。我已经更新了我的帖子。很抱歉,如果
条件
已经变成
{'menuA':['a100']}
,它现在返回
集(['error','correct'])
作为结果,我希望
error 2
是唯一返回的输出,因为有1项满足条件…如果
条件
变成
{'menuA:['a100']}
,它现在返回
set(['error2','correct'])
作为结果,我希望
error2
是唯一返回的输出,因为有1项满足条件。。。