我有两个不同的词典列表:
first = [{'id': '1'}, {'id': '2'}, {'id': '3'}]
second = [{'user_id': '1'}, {'user_id': '2'}]
我想要类似的东西:
# This is pseudocode
first (id) - second (user_id) = [{'id': '3'}]
这在python上是否可行?
我知道通过使用多个循环运算符是可能的,但是有更优雅的方法来解决这个问题,比如使用lambdas还是什么?
答案 0 :(得分:2)
一种方法是使用嵌套列表推导如下:
In [9]: [d1 for d1 in first if not any(d2['user_id'] == d1['id'] for d2 in second)]
Out[9]: [{'id': '3'}]
但是作为一种更加Pythonic的方式,使用集合操作和列表理解会更好:
In [13]: f = {d['id'] for d in first}
In [14]: s = {d['user_id'] for d in second}
In [15]: result = [{'id': i} for i in f - s]
In [16]: result
Out[16]: [{'id': '3'}]
答案 1 :(得分:1)
这是一种方法。使用list comprehension
和lambda
。
first = [{'id': '1'}, {'id': '2'}, {'id': '3'}]
second = [{'user_id': '1'}, {'user_id': '2'}]
checkVal = map(lambda d: d['user_id'], second)
print([i for i in first if i["id"] not in checkVal])
<强>输出:强>
[{'id': '3'}]