比较具有1个键且保持大于1个值的python词典

时间:2019-05-21 17:24:21

标签: python-3.x

有3个词典。我想将“标准”与“规则”进行比较,如果发生任何匹配,请将其添加到“ mydict”中。

criteria = {
    'no_of_EG': 2, 
    'no_of_VG': 2, 
    'no_of_G': 1, 
    'no_of_SG': 0, 
    'no_of_A': 0, 
    'no_of_SP': 0, 
    'no_of_P': 0, 
    'no_of_VP': 0, 
    'no_of_EP': 1}  
rules = {
    'no_of_EG' : (6,5,4,3),
    'no_of_EP' : (3,2,1),
    'no_of_VG' : (6,5,4,3),
    'no_of_G' : (6,5,4,3,2,1),
    'no_of_SG' : (6,5),
    'no_of_A' : (6,),
    'no_of_SP' : (3,2,1)}  
mydict = {
    'no_of_EG' : 0,
    'no_of_VG' : 0,
    'no_of_G' : 0,
    'no_of_SG' : 0,
    'no_of_A' : 0,
    'no_of_SP' : 0,
    'no_of_P' : 0,
    'no_of_VP' : 0,
    'no_of_EP' : 0}

mydict = {k: criteria[k] for k in criteria if k in rules and criteria[k] == rules[k]}
print("SELECTED RULES ARE:",mydict)

我该如何更新以上声明。因为它仅适用于在“规则”中包含单个值的键。但是在“规则”中,我的键拥有多个值。

预期输出:

mydict = {
    'no_of_EG' : 0,
    'no_of_VG' : 0,
    'no_of_G' : 1,
    'no_of_SG' : 0,
    'no_of_A' : 0,
    'no_of_SP' : 0,
    'no_of_P' : 0,
    'no_of_VP' : 0,
    'no_of_EP' : 1}

1 个答案:

答案 0 :(得分:0)

1)我想您希望使用in而不是==
2)如果您要更新值,则需要调用.update(...)而不分配新的dict

mydict.update({k: criteria[k] for k in criteria if k in rules and criteria[k] in rules[k]})

如果您对此有控制权,那么您的rules应该是sets而不是tuples