python - 如何在 python 中将两个列表与 dict 中的特定键进行比较
问题描述
我想获取两个带有 dict 值的列表,并找到仅出现在第一个列表中的特定值。
在这种情况下,只比较'name'键。
a = [
{'name': 'joseph', 'age': 33},
{'name': 'Emma', 'age': 11},
{'name': 'apple', 'age': 44}
]
b = [
{'name': 'apple', 'age': 44},
{'name': 'Emma', 'age': 22}
]
returnOnlyOne(a, b)
例如,会返回[{'name': 'joseph', 'age': 33}]
。
set()
解决方案不适用于这种情况。
解决方案
为了效率,我们首先在set
中创建一个名称b
,然后过滤列表a
:
from operator import itemgetter
def returnOnlyOne(a, b):
b_names = set(map(itemgetter('name'), b))
only_in_a = list(filter(lambda item: item['name'] not in b_names, a))
return only_in_a
样本输出:
a = [
{'name': 'joseph', 'age': 33},
{'name': 'Emma', 'age': 11},
{'name': 'apple', 'age': 44}
]
b = [
{'name': 'apple', 'age': 44},
{'name': 'Emma', 'age': 22}
]
print(returnOnlyOne(a, b))
# [{'name': 'joseph', 'age': 33}]
如果您不喜欢itemgetter
,filter
等,您可以使用推导式编写相同的内容:
def returnOnlyOne(a, b):
b_names = set(item['name'] for item in b)
return [ item for item in a if item['name'] not in b_names]
推荐阅读
- javascript - 使用 javascript 操作哈希数组
- google-app-engine - Google Cloud:神秘的 0.033/s 计算请求 API
- python - 将一列中的文本映射到另一列中的文本
- sockets - How can get ip Address form socket io in Golang
- php - PDF 输出和 TCPDF 的问题
- javascript - 将 Auth 用户从 PHP / Laravel 传递给 JavaScript
- r - 替代具有过滤计算和数据导出的嵌套循环
- flutter - Flutter 如何导航回特定页面
- android - 如何扩展矢量可绘制对象?
- python - 使用 Numpy 在 Python 中优化数组操作