问题描述
我有 2 个对象数组:
a = [{'a': 1,'b': 2},{'c': 3,'d': 4},{'e': 5,'f': 6}]
b = [{'a': 1,{'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}]
在每个数组中,key 的顺序可能不同。我可以尝试以下并检查:
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
但是这种方法感觉不对。有没有更简单的方法来做到这一点,或者任何可以做到这一点的实用程序库类似于 fnc
或 pydash
?
解决方法
您可以使用NULL
:
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
,
只要测试所有元素是否都在另一个数组中
a = [{'a': 1,'b': 2},{'c': 3,'d': 4},{'e': 5,'f': 6}]
b = [{'a': 1,{'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,{'e': 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)