在python中,如何将两个dict值列表与一个特定值进行比较?

在python中,如何将两个dict值列表与一个特定值进行比较?,python,list,python-2.7,dictionary,for-loop,Python,List,Python 2.7,Dictionary,For Loop,我有两个口述,列表中有一个: var_a = [{'name':"John",'number':21},{'name':"Kevin",'number':23}] var_b = {'21':"yes"},{'24':"yes"} 我需要将var_a和var_b与var_b中的键和var_a中的数值进行比较 我已经尝试了这个,并得到了输出: for key, value in var_b.iteritems():

我有两个口述,列表中有一个:

var_a = [{'name':"John",'number':21},{'name':"Kevin",'number':23}]
var_b = {'21':"yes"},{'24':"yes"}
我需要将var_a和var_b与var_b中的键和var_a中的数值进行比较

我已经尝试了这个,并得到了输出:

for key, value in var_b.iteritems():
    for l in var_a:
        if l['number'] == key:
           print l

这需要两个循环来获得输出。那么有没有办法用python 2.7完成这个单循环呢?

您可以使用
map
var\u b
键创建一个键集,然后只在
var\u a
上循环,检查
var\u b
键集中是否存在数值

var_a = [{'name':"John",'number':21},{'name':"Kevin",'number':23}]
var_b = [{'21':"yes"},{'23':"no"}]

keys_set = set(map(lambda x: int(list(x.keys())[0]), var_b))
for i in var_a:
    if i['number'] in keys_set:
        print(i)
输出

{'name': 'John', 'number': 21}
{'name': 'Kevin', 'number': 23}

我认为您需要将lambda函数与一个for循环一起使用:

for key, value in var_b.iteritems():
    result = filter(lambda d: d['id'] == key, var_a)

结果将为您提供确切的输出。

数值是否唯一?var_b是一个列表。不能在列表中执行.iteritems()。请编辑您的问题是数值为unique@NickYes,edited@panien即使在编辑之后,您有
var_b={'21':“yes”},{'24':“yes”}
,这意味着
var_b
是由两个字典组成的元组。你的意思是
var_b={'21':“yes”,'24':“yes”}
?此代码将创建字典中每个键的集合,这些键在
var_b
列表中通过map方法获取一个iterable并应用一个函数(在iterable中的每个项上)在我的例子中,lambda函数提取所有键,然后在
var_a
项上循环,并检查项的数值是否在
var_b
键集中,如果是,它将打印
var_a
项。@Navi你意识到
map
是一个循环吗?@Navi你意识到
过滤器
是一个循环吗?是的快于loop@Nick