【问题标题】:How to compare a two list of dict values with one particular value in python?python - 如何将两个dict值列表与python中的一个特定值进行比较?
【发布时间】:2020-10-14 17:19:54
【问题描述】:

我有两个字典,一个在列表中:

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 完成这个单循环?

【问题讨论】:

  • 数字值是否唯一?
  • var_b 是一个列表。你不能在列表上做 .iteritems() 。请编辑您的问题
  • 是的,数值是唯一的@Nick
  • 是的,编辑@Pani
  • 即使在您编辑之后,您仍然拥有var_b = {'21':"yes"},{'24':"yes"},这意味着var_b 是两个字典的元组。你是说var_b = {'21':"yes",'24':"yes"} 吗?

标签: python list python-2.7 dictionary for-loop


【解决方案1】:

您可以使用mapvar_b 键创建一个键集,然后仅循环var_a 以检查var_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}

【讨论】:

  • 这段代码将创建一组字典的每个键,在var_b列表中通过map方法获取一个可迭代并应用一个函数(在可迭代的每个项目上)在我的例子中是lambda函数提取所有键,然后循环遍历 var_a 项目并检查项目的数值是否在 var_b 键集中,如果是,则打印 var_a 项目。
  • @Navi 你知道map 是一个循环吗?
【解决方案2】:

我认为您需要使用带有一个 for 循环的 lambda 函数:

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

结果肯定会给你输出。

【讨论】:

  • @Navi 你知道filter 是一个循环吗?
  • 比for循环快@Nick
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2016-04-17
  • 2019-05-08
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
相关资源
最近更新 更多