前提是,里边的元素可能是乱序的
a = [{'key': 1, 'value': 2}, {'key': 3, 'value': 4}]
b = [{'key': 5, 'value': 6}, {'key': 1, 'value': 2}, {'key': 3, 'value': 41} ] # value 不一样的忽略掉
# 想要的结果:
c = [{'key': 5, 'value': 6}]
前提是,里边的元素可能是乱序的
a = [{'key': 1, 'value': 2}, {'key': 3, 'value': 4}]
b = [{'key': 5, 'value': 6}, {'key': 1, 'value': 2}, {'key': 3, 'value': 41} ] # value 不一样的忽略掉
# 想要的结果:
c = [{'key': 5, 'value': 6}]
|
hehhehNov 6, 2019
1
把 key,val 转成 tuple,然后整个 list 打包成 set 然后 intersection
|
|
CookyNov 6, 2019 via Android
2
两边各自合成一个字典做比较
|
|
fdppzrlNov 6, 2019 via Android
3
c.addAll(a.removeall(b))
c.addAll(b.removeall(a)) Java 大概的写法就酱 |
|
ranlanNov 6, 2019
4
b = [{'key': 5, 'value': 6}, {'key': 1, 'value': 2}, {'key': 3, 'value': 41} ]中应该是 {'key': 3, 'value': 41} 这个元素应该是 {'key': 3, 'value': 4}吧?
新手的解法 c = [i for i in b if i not in a] |
|
yesterdaysunNov 6, 2019
6
ak = set(map(lambda x: x['key'], a))
bk = set(map(lambda x: x['key'], a)) c = list(filter(lambda x: x['key'] not in bk, a)) + list(filter(lambda x: x['key'] not in ak, b)) print(c) |
|
ranlanNov 6, 2019
7
不还意思我理解错了
应该是这样 a1 = [x['key'] for x in a] c = [i for i in b if i['key'] not in a1] |
|
8
|
|
johnnyluckNov 6, 2019
9
d = set([x['key'] for x in a]) ^ set([y['key'] for y in b])
c = [x for x in (a+b) if x['key'] in d] |
|
20015jjwNov 7, 2019 via Android
10
^ 双关了
|
|
xhxhxNov 7, 2019
11
array_diff
|