在 python 中找到 2 个对象数组之间的值差异

find difference of values between 2 array of objects in python

我有 2 个对象数组:

a = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}]
b = [{'a': 1, 'b': 2}, {'g': 3, 'h': 4}, {'f': 6, 'e': 5}]

Output:
a - b = [{'c': 3, 'd': 4}] ("-" symbol is only for representation, showing difference. Not mathematical minus.)
b - a = [{'g': 3, 'h': 4}]

在每个数组中,键的顺序可能不同。我可以尝试关注并检查一下:

for i in range(len(a)):
   current_val = a[i]
   for x, y in current_val.items:
      //search x keyword in array b and compare it with b

但这种方法感觉不对。有没有更简单的方法或任何实用程序库可以做到这一点类似于 fncpydash?

您可以使用 lambda:

g = lambda a,b : [x for x in a if x not in b]

g(a,b) # a-b

[{'c': 3, 'd': 4}]


g(b,a) # b-a

[{'g': 3, 'h': 4}]

只测试所有元素是否都在另一个数组中

a = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 5, 'f': 6}]
b = [{'a': 1, 'b': 2}, {'g': 3, 'h': 4}, {'f': 6, 'e': 5}]


def find_diff(array_a, array_b):
    diff = []
    for e in array_a:
        if e not in array_b:
            diff.append(e)
    return diff

print(find_diff(a, b))
print(find_diff(b, a))

与列表理解相同

def find_diff(array_a, array_b):
    return [e for e in array_a if e not in array_b]

这里是减去字典列表的代码

a = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}, {'e': 6, 'f': 6}]
b = [{'a': 1, 'b': 2}, {'g': 3, 'h': 4}, {'f': 6, 'e': 6}]
a_b = []
b_a = []
for element in a:
    if element not in b:
        a_b.append( element )
for element in b:
    if element not in a:
        b_a.append( element )
print("a-b =",a_b)
print("b-a =",b_a)