两个 list 怎么比较后求出多出来的那值?

2019-11-06 17:58:42 +08:00
 css3

前提是,里边的元素可能是乱序的

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}]
3090 次点击
所在节点    Python
11 条回复
hehheh
2019-11-06 18:02:33 +08:00
把 key,val 转成 tuple,然后整个 list 打包成 set 然后 intersection
Cooky
2019-11-06 18:05:10 +08:00
两边各自合成一个字典做比较
fdppzrl
2019-11-06 18:11:30 +08:00
c.addAll(a.removeall(b))
c.addAll(b.removeall(a))
Java 大概的写法就酱
ranlan
2019-11-06 18:14:17 +08:00
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]
css3
2019-11-06 18:21:59 +08:00
@ranlan 不是
yesterdaysun
2019-11-06 18:32:06 +08:00
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)
ranlan
2019-11-06 18:35:19 +08:00
不还意思我理解错了
应该是这样
a1 = [x['key'] for x in a]

c = [i for i in b if i['key'] not in a1]
css3
2019-11-06 18:59:47 +08:00
@yesterdaysun
@ranlan
已采纳多谢🤪
johnnyluck
2019-11-06 21:46:53 +08:00
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]
20015jjw
2019-11-07 08:11:59 +08:00
^ 双关了
xhxhx
2019-11-07 10:22:36 +08:00
array_diff

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/616940

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX