Python,通过比较不同的字段来区分dict列表

时间:2018-04-26 07:02:53

标签: python python-3.x lambda

我有两个不同的词典列表:

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还是什么?

2 个答案:

答案 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 comprehensionlambda

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'}]