我有两个字典,想要映射值,如果两个映射的键都打印了,请打印,请注意这里的键可以大于两个,所以要动态。 [如果在键dict中添加了键,则还将在dict a中为其添加值。]
a = {
'value1': 1,
'value2': 2
}
b = {
'keys': {
'key1': 'value1',
'key2': 'value2'
},
'mapping': [{
'check': {
'key1': 3,
'key2': 4
}
},
{
'check': {
'key1': 5,
'key2': 6
}
},
{
'check': {
'key1': 1,
'key2': 2
}
}
]
}
for i in b['mapping']:
flag = True
for key, value in b['keys'].items():
if not a.get(value) == i['check'][key]:
flag = False
break
if flag:
print('yes')
break
在这里您可以看到键值实际上是“ dict a”的键。
编写了上面的代码,但是在python中有更好的方法做到这一点。
答案 0 :(得分:1)
通常,如果有一个循环,您可以在该循环中设置或清除标志,然后根据条件中断,则可以将其替换为any
或all
。
在这种情况下,
flag = True
for key, value in b['keys'].items():
if not a.get(value) == i['check'][key]:
flag = False
break
可以替换为
flag = all(a.get(value) == i['check'][key] for key, value in b['keys'].items())
答案 1 :(得分:0)
假设这些值是可散列的(例如,int
,如图所示),则可以将它们变成用于比较的集合。
wanted = set((b_key, a[b_value]) for b_key, b_value in b["keys"].items())
for check_dict in b['mapping']:
check = set(check_dict['check'].items())
if wanted.issubset(check):
print("yes")
break
向mkrieger1点头,可以将其压缩为
wanted = set((b_key, a[b_value]) for b_key, b_value in b["keys"].items())
if any(wanted.issubset(set(check_dict['check'].items()))
for check_dict in b['mapping']):
print("yes")