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项满足条件。。。